From 77bf0abab17ca107e42e9fe6aef807701044655f Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Wed, 1 Jan 2025 22:52:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A6=BB=E5=BC=80=E8=BD=BD?= =?UTF-8?q?=E5=85=B7=E6=8C=89=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/atsuishio/superbwarfare/ModUtils.java | 1 + .../superbwarfare/client/ClickHandler.java | 3 ++ .../superbwarfare/init/ModKeyMappings.java | 4 +- .../mixins/ClientPlayerEntityMixin.java | 4 ++ .../mixins/PlayerEntityMixin.java | 6 ++- .../message/PlayerStopRidingMessage.java | 38 +++++++++++++++++++ .../assets/superbwarfare/lang/en_us.json | 1 + .../assets/superbwarfare/lang/zh_cn.json | 1 + 8 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/atsuishio/superbwarfare/network/message/PlayerStopRidingMessage.java diff --git a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java index 3eb0c3468..35d72a5ee 100644 --- a/src/main/java/com/atsuishio/superbwarfare/ModUtils.java +++ b/src/main/java/com/atsuishio/superbwarfare/ModUtils.java @@ -162,6 +162,7 @@ public class ModUtils { addNetworkMessage(RadarMenuOpenMessage.class, RadarMenuOpenMessage::encode, RadarMenuOpenMessage::decode, RadarMenuOpenMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); addNetworkMessage(RadarMenuCloseMessage.class, RadarMenuCloseMessage::encode, RadarMenuCloseMessage::decode, RadarMenuCloseMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); addNetworkMessage(RadarSetPosMessage.class, RadarSetPosMessage::encode, RadarSetPosMessage::decode, RadarSetPosMessage::handler); + addNetworkMessage(PlayerStopRidingMessage.class, PlayerStopRidingMessage::encode, PlayerStopRidingMessage::decode, PlayerStopRidingMessage::handler); event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)), Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get()))); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index 3d9105ed2..3abbab180 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -215,6 +215,9 @@ public class ClickHandler { if (key == ModKeyMappings.INTERACT.getKey().getValue()) { ModUtils.PACKET_HANDLER.sendToServer(new InteractMessage(0)); } + if (key == ModKeyMappings.DISMOUNT.getKey().getValue()) { + ModUtils.PACKET_HANDLER.sendToServer(new PlayerStopRidingMessage(0)); + } if (key == ModKeyMappings.EDIT_MODE.getKey().getValue() && ClientEventHandler.burstFireSize == 0) { ClientEventHandler.holdFire = false; ModUtils.PACKET_HANDLER.sendToServer(new EditModeMessage(0)); diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModKeyMappings.java b/src/main/java/com/atsuishio/superbwarfare/init/ModKeyMappings.java index 40d2db8e9..e795e67ba 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModKeyMappings.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModKeyMappings.java @@ -22,6 +22,7 @@ public class ModKeyMappings { public static final KeyMapping SENSITIVITY_INCREASE = new KeyMapping("key.superbwarfare.sensitivity_increase", GLFW.GLFW_KEY_PAGE_UP, "key.categories.superbwarfare"); public static final KeyMapping SENSITIVITY_REDUCE = new KeyMapping("key.superbwarfare.sensitivity_reduce", GLFW.GLFW_KEY_PAGE_DOWN, "key.categories.superbwarfare"); public static final KeyMapping INTERACT = new KeyMapping("key.superbwarfare.interact", GLFW.GLFW_KEY_X, "key.categories.superbwarfare"); + public static final KeyMapping DISMOUNT = new KeyMapping("key.superbwarfare.dismount", GLFW.GLFW_KEY_J, "key.categories.superbwarfare"); public static final KeyMapping BREATH = new KeyMapping("key.superbwarfare.breath", GLFW.GLFW_KEY_LEFT_CONTROL, "key.categories.superbwarfare") { private boolean isDownOld = false; @@ -60,6 +61,7 @@ public class ModKeyMappings { event.register(SENSITIVITY_INCREASE); event.register(SENSITIVITY_REDUCE); event.register(INTERACT); + event.register(DISMOUNT); event.register(BREATH); event.register(CONFIG); event.register(EDIT_MODE); @@ -78,8 +80,6 @@ public class ModKeyMappings { @SubscribeEvent public static void onClientTick(TickEvent.ClientTickEvent event) { if (Minecraft.getInstance().screen == null) { - FIRE_MODE.consumeClick(); - INTERACT.consumeClick(); BREATH.consumeClick(); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/ClientPlayerEntityMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/ClientPlayerEntityMixin.java index 321c1a107..1ded1a556 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/ClientPlayerEntityMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/ClientPlayerEntityMixin.java @@ -10,8 +10,12 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * Code based on @Luke100000's ImmersiveAircraft + */ @Mixin(LocalPlayer.class) public class ClientPlayerEntityMixin extends AbstractClientPlayer { + public ClientPlayerEntityMixin(ClientLevel world, GameProfile profile) { super(world, profile); } diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/PlayerEntityMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/PlayerEntityMixin.java index e4fb193c5..ec40e3848 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/PlayerEntityMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/PlayerEntityMixin.java @@ -12,8 +12,12 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(value = Player.class, priority = 1100) +/** + * Code based on @Luke100000's ImmersiveAircraft + */ +@Mixin(value = Player.class, priority = 1145) public abstract class PlayerEntityMixin extends Entity { + public PlayerEntityMixin(EntityType type, Level world) { super(type, world); } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/PlayerStopRidingMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/PlayerStopRidingMessage.java new file mode 100644 index 000000000..a67e8d871 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/PlayerStopRidingMessage.java @@ -0,0 +1,38 @@ +package com.atsuishio.superbwarfare.network.message; + +import com.atsuishio.superbwarfare.entity.VehicleEntity; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class PlayerStopRidingMessage { + + private final int type; + + public PlayerStopRidingMessage(int type) { + this.type = type; + } + + public static void encode(PlayerStopRidingMessage message, FriendlyByteBuf buffer) { + buffer.writeInt(message.type); + } + + public static PlayerStopRidingMessage decode(FriendlyByteBuf buffer) { + return new PlayerStopRidingMessage(buffer.readInt()); + } + + public static void handler(PlayerStopRidingMessage message, Supplier ctx) { + ctx.get().enqueueWork(() -> { + ServerPlayer player = ctx.get().getSender(); + if (player == null) return; + var vehicle = player.getVehicle(); + if (!(vehicle instanceof VehicleEntity)) return; + + player.stopRiding(); + player.setJumping(false); + }); + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index f6dcf80c1..c7b769f71 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -380,6 +380,7 @@ "key.superbwarfare.sensitivity_increase": "Increase Sensitivity", "key.superbwarfare.sensitivity_reduce": "Reduce Sensitivity", "key.superbwarfare.interact": "Interact", + "key.superbwarfare.dismount": "Dismount", "key.superbwarfare.breath": "Breathe", "key.superbwarfare.config": "Open Config Screen", "key.superbwarfare.edit_mode": "Edit Weapon", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 18bf1e6cc..dce2461a3 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -380,6 +380,7 @@ "key.superbwarfare.sensitivity_increase": "增加灵敏度", "key.superbwarfare.sensitivity_reduce": "减少灵敏度", "key.superbwarfare.interact": "交互", + "key.superbwarfare.dismount": "离开载具", "key.superbwarfare.breath": "屏息", "key.superbwarfare.config": "打开配置界面", "key.superbwarfare.edit_mode": "改装",