From 38394d5c28859841b136cd3d345fa5a48c812e09 Mon Sep 17 00:00:00 2001 From: Octol1ttle Date: Tue, 31 Oct 2023 00:11:40 +0500 Subject: [PATCH 1/4] feat: drop items when knocked down --- gradle.properties | 2 +- src/main/java/ru/octol1ttle/knockdowns/Knockdowns.java | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index 0ddbc52..a72b539 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.20.2+build.4 loader_version=0.14.24 # Mod Properties -mod_version=1.0.0 +mod_version=1.1.0 maven_group=ru.octol1ttle.knockdowns archives_base_name=knockdowns diff --git a/src/main/java/ru/octol1ttle/knockdowns/Knockdowns.java b/src/main/java/ru/octol1ttle/knockdowns/Knockdowns.java index 39c228f..a59282c 100644 --- a/src/main/java/ru/octol1ttle/knockdowns/Knockdowns.java +++ b/src/main/java/ru/octol1ttle/knockdowns/Knockdowns.java @@ -25,6 +25,7 @@ import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.Identifier; import net.minecraft.util.TypedActionResult; +import net.minecraft.world.GameRules; import ru.octol1ttle.knockdowns.api.IKnockableDown; import ru.octol1ttle.knockdowns.network.KnockdownsNetworkingConstants; @@ -54,13 +55,18 @@ public class Knockdowns implements ModInitializer { return true; } + ServerPlayerEntity serverPlayer = (ServerPlayerEntity) entity; // TODO: timer + if (!serverPlayer.getWorld().getGameRules().getBoolean(GameRules.KEEP_INVENTORY)) { + serverPlayer.getInventory().dropAll(); + } entity.setHealth(1.0f); entity.setInvulnerable(true); entity.setGlowing(true); entity.setAir(entity.getMaxAir()); - entity.setFireTicks(0); + entity.extinguish(); entity.setFrozenTicks(0); + entity.setOnFire(false); entity.clearStatusEffects(); knockableDown.knockdowns$setKnockedDown(true); @@ -69,8 +75,6 @@ public class Knockdowns implements ModInitializer { buf.writeUuid(entity.getUuid()); buf.writeBoolean(true); - ServerPlayerEntity serverPlayer = (ServerPlayerEntity) entity; - ServerPlayNetworking.send(serverPlayer, KnockdownsNetworkingConstants.S2C_SEND_PLAYER_KNOCKED_DOWN, buf); for (ServerPlayerEntity player : PlayerLookup.tracking(entity)) { ServerPlayNetworking.send(player, KnockdownsNetworkingConstants.S2C_SEND_PLAYER_KNOCKED_DOWN, buf); From 22a7d5b03661ccf2ee9988cbb6fc0a985c7ca411 Mon Sep 17 00:00:00 2001 From: Octol1ttle Date: Tue, 31 Oct 2023 10:29:03 +0500 Subject: [PATCH 2/4] fix: copy packet buffer in ClientOnEntityLoad to fix a weird crash --- src/client/java/ru/octol1ttle/knockdowns/KnockdownsClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/java/ru/octol1ttle/knockdowns/KnockdownsClient.java b/src/client/java/ru/octol1ttle/knockdowns/KnockdownsClient.java index 889224a..25ff0de 100644 --- a/src/client/java/ru/octol1ttle/knockdowns/KnockdownsClient.java +++ b/src/client/java/ru/octol1ttle/knockdowns/KnockdownsClient.java @@ -81,7 +81,7 @@ public class KnockdownsClient implements ClientModInitializer { PacketByteBuf buf = PacketByteBufs.create(); buf.writeUuid(entity.getUuid()); - ClientPlayNetworking.send(KnockdownsNetworkingConstants.C2S_REQUEST_PLAYER_KNOCKED_DOWN, buf); + ClientPlayNetworking.send(KnockdownsNetworkingConstants.C2S_REQUEST_PLAYER_KNOCKED_DOWN, PacketByteBufs.copy(buf)); ClientPlayNetworking.send(KnockdownsNetworkingConstants.C2S_REQUEST_PLAYER_REVIVING, buf); } }); From 430b79c1620700063ef2935bc76ca710217015ee Mon Sep 17 00:00:00 2001 From: Octol1ttle Date: Tue, 31 Oct 2023 10:29:36 +0500 Subject: [PATCH 3/4] fix: save KnockedDown state to player NBT --- .../knockdowns/mixin/PlayerEntityMixin.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/octol1ttle/knockdowns/mixin/PlayerEntityMixin.java b/src/main/java/ru/octol1ttle/knockdowns/mixin/PlayerEntityMixin.java index 28a70a1..3852bee 100644 --- a/src/main/java/ru/octol1ttle/knockdowns/mixin/PlayerEntityMixin.java +++ b/src/main/java/ru/octol1ttle/knockdowns/mixin/PlayerEntityMixin.java @@ -4,9 +4,12 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import java.util.UUID; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.NbtCompound; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; 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; @Mixin(PlayerEntity.class) @@ -15,11 +18,9 @@ public abstract class PlayerEntityMixin implements IKnockableDown { private boolean knockedDown; @Unique private boolean beingRevived; - @Unique - private int reviveAt; @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; if (!(player instanceof IKnockableDown knockableDown)) { throw new IllegalStateException(); @@ -29,10 +30,20 @@ public abstract class PlayerEntityMixin implements IKnockableDown { } @ModifyReturnValue(method = "canFoodHeal", at = @At("RETURN")) - private boolean canFoodHeal(boolean original) { + private boolean dontHealIfKnockedDown(boolean original) { 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 public boolean knockdowns$isKnockedDown() { return knockedDown; From ac3d92fc97a2020e95c07fa365f1213a85e38f63 Mon Sep 17 00:00:00 2001 From: Octol1ttle Date: Tue, 31 Oct 2023 10:29:47 +0500 Subject: [PATCH 4/4] chore: bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index a72b539..f5d3061 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.20.2+build.4 loader_version=0.14.24 # Mod Properties -mod_version=1.1.0 +mod_version=1.1.1 maven_group=ru.octol1ttle.knockdowns archives_base_name=knockdowns