From 1dbbaaa92e724441627e11fbe175b813ae47e0a9 Mon Sep 17 00:00:00 2001 From: Atsuishio <842960157@qq.com> Date: Fri, 11 Apr 2025 01:49:19 +0800 Subject: [PATCH] =?UTF-8?q?=E9=93=B2Cap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../atsuishio/superbwarfare/block/JumpPadBlock.java | 11 +++++------ .../superbwarfare/client/ClickHandler.java | 6 +++--- .../superbwarfare/event/ClientEventHandler.java | 6 ++++++ .../superbwarfare/event/PlayerEventHandler.java | 11 ----------- .../network/message/send/DoubleJumpMessage.java | 13 +++---------- 5 files changed, 17 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java b/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java index a2fb3dff3..76a22de1a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java +++ b/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java @@ -2,12 +2,13 @@ package com.atsuishio.superbwarfare.block; import com.atsuishio.superbwarfare.entity.TargetEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.CannonEntity; -import com.atsuishio.superbwarfare.init.ModAttachments; +import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModSounds; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; @@ -124,10 +125,8 @@ public class JumpPadBlock extends Block { level.playLocalSound(pos.getX(), pos.getY(), pos.getZ(), ModSounds.JUMP.get(), SoundSource.BLOCKS, 1, 1, false); } - var capability = entity.getData(ModAttachments.PLAYER_VARIABLE).watch(); - capability.playerDoubleJump = true; - - entity.setData(ModAttachments.PLAYER_VARIABLE, capability); - capability.sync(entity); + if (entity instanceof Player player && player.level().isClientSide) { + ClientEventHandler.canDoubleJump = true; + } } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index c31fda031..e0524416d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -406,11 +406,11 @@ public class ClickHandler { return; } - if (player.getData(ModAttachments.PLAYER_VARIABLE).playerDoubleJump) { + if (canDoubleJump) { player.setDeltaMovement(new Vec3(player.getLookAngle().x, 0.8, player.getLookAngle().z)); level.playLocalSound(x, y, z, ModSounds.DOUBLE_JUMP.get(), SoundSource.BLOCKS, 1, 1, false); - - PacketDistributor.sendToServer(new DoubleJumpMessage(false)); + PacketDistributor.sendToServer(new DoubleJumpMessage(0)); + canDoubleJump = false; } } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 59918425c..546e1a5c6 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -163,6 +163,8 @@ public class ClientEventHandler { public static float cameraRoll; public static float cantSprint = 0; + public static boolean canDoubleJump = false; + @SubscribeEvent public static void handleWeaponTurn(RenderHandEvent event) { @@ -280,6 +282,10 @@ public class ClientEventHandler { keysCache = keys; } + if (player.onGround() && canDoubleJump) { + canDoubleJump = false; + } + handleVariableDecrease(); aimAtVillager(player); staminaSystem(); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java index 6b590efab..e22ad26b5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java @@ -77,17 +77,6 @@ public class PlayerEventHandler { if (stack.is(ModTags.Items.GUN)) { handleSpecialWeaponAmmo(player); } - - handleGround(player); - } - - private static void handleGround(Player player) { - var cap = player.getData(ModAttachments.PLAYER_VARIABLE); - - if (player.onGround()) { - cap.playerDoubleJump = false; - player.setData(ModAttachments.PLAYER_VARIABLE, cap); - } } private static void handleSpecialWeaponAmmo(Player player) { diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/DoubleJumpMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/DoubleJumpMessage.java index 97068344e..5026d617d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/DoubleJumpMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/DoubleJumpMessage.java @@ -1,7 +1,6 @@ package com.atsuishio.superbwarfare.network.message.send; import com.atsuishio.superbwarfare.Mod; -import com.atsuishio.superbwarfare.init.ModAttachments; import com.atsuishio.superbwarfare.init.ModSounds; import io.netty.buffer.ByteBuf; import net.minecraft.core.BlockPos; @@ -14,12 +13,12 @@ import net.minecraft.world.level.Level; import net.neoforged.neoforge.network.handling.IPayloadContext; import org.jetbrains.annotations.NotNull; -public record DoubleJumpMessage(boolean canDoubleJump) implements CustomPacketPayload { +public record DoubleJumpMessage(int empty) implements CustomPacketPayload { public static final Type TYPE = new Type<>(Mod.loc("double_jump")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.BOOL, - DoubleJumpMessage::canDoubleJump, + ByteBufCodecs.INT, + DoubleJumpMessage::empty, DoubleJumpMessage::new ); @@ -32,12 +31,6 @@ public record DoubleJumpMessage(boolean canDoubleJump) implements CustomPacketPa double z = player.getZ(); level.playSound(null, BlockPos.containing(x, y, z), ModSounds.DOUBLE_JUMP.get(), SoundSource.BLOCKS, 1, 1); - - var cap = player.getData(ModAttachments.PLAYER_VARIABLE).watch(); - - cap.playerDoubleJump = message.canDoubleJump; - player.setData(ModAttachments.PLAYER_VARIABLE, cap); - cap.sync(player); } @Override