From e4874ceb12802923e8bb5b1bd8868a63b1e713b7 Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Tue, 3 Jun 2025 00:34:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=81=E8=AE=B8=E5=BC=B9=E5=B0=84=E5=8F=B0?= =?UTF-8?q?=E4=BA=8C=E6=AE=B5=E8=B7=B3=E4=BB=BB=E6=84=8F=E9=AA=91=E4=B9=98?= =?UTF-8?q?=E5=AE=9E=E4=BD=93=EF=BC=88=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../atsuishio/superbwarfare/block/JumpPadBlock.java | 6 ++++++ .../superbwarfare/network/NetworkRegistry.java | 2 +- .../network/message/send/DoubleJumpMessage.java | 13 ++++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java b/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java index 649ff523d..f1ab239b4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java +++ b/src/main/java/com/atsuishio/superbwarfare/block/JumpPadBlock.java @@ -126,6 +126,12 @@ public class JumpPadBlock extends Block { level.playLocalSound(pos.getX(), pos.getY(), pos.getZ(), ModSounds.JUMP.get(), SoundSource.BLOCKS, 1, 1, false); } + // 谁说载具就不能二段跳了() + entity.passengers.stream() + .filter(e -> e instanceof Player player && player.level().isClientSide) + .findFirst() + .ifPresent(player -> Mod.queueClientWork(2, () -> ClientEventHandler.canDoubleJump = true)); + if (entity instanceof Player player && player.level().isClientSide) { Mod.queueClientWork(2, () -> ClientEventHandler.canDoubleJump = true); } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/NetworkRegistry.java b/src/main/java/com/atsuishio/superbwarfare/network/NetworkRegistry.java index fd6916bec..4969a62a4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/NetworkRegistry.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/NetworkRegistry.java @@ -28,7 +28,7 @@ public class NetworkRegistry { registrar.playToServer(LaserShootMessage.TYPE, LaserShootMessage.STREAM_CODEC, LaserShootMessage::handler); registrar.playToServer(ShootMessage.TYPE, ShootMessage.STREAM_CODEC, ShootMessage::handler); - registrar.playToServer(DoubleJumpMessage.TYPE, DoubleJumpMessage.STREAM_CODEC, DoubleJumpMessage::handler); + registrar.playToServer(DoubleJumpMessage.TYPE, DoubleJumpMessage.STREAM_CODEC, (message, context) -> DoubleJumpMessage.handler(context)); registrar.playToServer(VehicleMovementMessage.TYPE, VehicleMovementMessage.STREAM_CODEC, VehicleMovementMessage::handler); registrar.playToServer(MeleeAttackMessage.TYPE, MeleeAttackMessage.STREAM_CODEC, MeleeAttackMessage::handler); registrar.playToServer(LungeMineAttackMessage.TYPE, LungeMineAttackMessage.STREAM_CODEC, LungeMineAttackMessage::handler); 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 5026d617d..038907fd1 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 @@ -9,7 +9,9 @@ import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; import net.neoforged.neoforge.network.handling.IPayloadContext; import org.jetbrains.annotations.NotNull; @@ -22,7 +24,7 @@ public record DoubleJumpMessage(int empty) implements CustomPacketPayload { DoubleJumpMessage::new ); - public static void handler(final DoubleJumpMessage message, final IPayloadContext context) { + public static void handler(final IPayloadContext context) { ServerPlayer player = (ServerPlayer) context.player(); Level level = player.level(); @@ -31,6 +33,15 @@ public record DoubleJumpMessage(int empty) implements CustomPacketPayload { double z = player.getZ(); level.playSound(null, BlockPos.containing(x, y, z), ModSounds.DOUBLE_JUMP.get(), SoundSource.BLOCKS, 1, 1); + + Entity vehicle = player; + while (vehicle.getVehicle() != null) { + vehicle = vehicle.getVehicle(); + } + + if (vehicle != player) { + vehicle.setDeltaMovement(new Vec3(vehicle.getLookAngle().x, 0.8, vehicle.getLookAngle().z)); + } } @Override