fix: save KnockedDown state to player NBT
This commit is contained in:
parent
22a7d5b036
commit
430b79c162
1 changed files with 15 additions and 4 deletions
|
@ -4,9 +4,12 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||||
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
|
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.nbt.NbtCompound;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
import ru.octol1ttle.knockdowns.api.IKnockableDown;
|
import ru.octol1ttle.knockdowns.api.IKnockableDown;
|
||||||
|
|
||||||
@Mixin(PlayerEntity.class)
|
@Mixin(PlayerEntity.class)
|
||||||
|
@ -15,11 +18,9 @@ public abstract class PlayerEntityMixin implements IKnockableDown {
|
||||||
private boolean knockedDown;
|
private boolean knockedDown;
|
||||||
@Unique
|
@Unique
|
||||||
private boolean beingRevived;
|
private boolean beingRevived;
|
||||||
@Unique
|
|
||||||
private int reviveAt;
|
|
||||||
|
|
||||||
@ModifyExpressionValue(method = "updatePose", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;isSwimming()Z"))
|
@ModifyExpressionValue(method = "updatePose", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;isSwimming()Z"))
|
||||||
private boolean isKnockedDown(boolean original) {
|
private boolean enterSwimmingIfKnockedDown(boolean original) {
|
||||||
PlayerEntity player = (PlayerEntity)(Object)this;
|
PlayerEntity player = (PlayerEntity)(Object)this;
|
||||||
if (!(player instanceof IKnockableDown knockableDown)) {
|
if (!(player instanceof IKnockableDown knockableDown)) {
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
|
@ -29,10 +30,20 @@ public abstract class PlayerEntityMixin implements IKnockableDown {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ModifyReturnValue(method = "canFoodHeal", at = @At("RETURN"))
|
@ModifyReturnValue(method = "canFoodHeal", at = @At("RETURN"))
|
||||||
private boolean canFoodHeal(boolean original) {
|
private boolean dontHealIfKnockedDown(boolean original) {
|
||||||
return original && !this.knockdowns$isKnockedDown();
|
return original && !this.knockdowns$isKnockedDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject(method = "readCustomDataFromNbt", at = @At("TAIL"))
|
||||||
|
public void readKnockedDownFromNbt(NbtCompound nbt, CallbackInfo ci) {
|
||||||
|
this.knockedDown = nbt.getBoolean("KnockedDown");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "writeCustomDataToNbt", at = @At("TAIL"))
|
||||||
|
public void writeKnockedDownToNbt(NbtCompound nbt, CallbackInfo ci) {
|
||||||
|
nbt.putBoolean("KnockedDown", this.knockedDown);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean knockdowns$isKnockedDown() {
|
public boolean knockdowns$isKnockedDown() {
|
||||||
return knockedDown;
|
return knockedDown;
|
||||||
|
|
Loading…
Add table
Reference in a new issue