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