From aacd22bf932bddd05a7cfd7865cc4659041b9d68 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Wed, 1 Jan 2025 23:06:35 +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=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mixins/ClientPacketListenerMixin.java | 55 +++++++++++++++++++ src/main/resources/mixins.superbwarfare.json | 1 + 2 files changed, 56 insertions(+) create mode 100644 src/main/java/com/atsuishio/superbwarfare/mixins/ClientPacketListenerMixin.java diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/ClientPacketListenerMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/ClientPacketListenerMixin.java new file mode 100644 index 000000000..3895e7e63 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/ClientPacketListenerMixin.java @@ -0,0 +1,55 @@ +package com.atsuishio.superbwarfare.mixins; + +import com.atsuishio.superbwarfare.entity.VehicleEntity; +import com.atsuishio.superbwarfare.init.ModKeyMappings; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundSetPassengersPacket; +import net.minecraft.world.entity.Entity; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +/** + * Code based on @Luke100000's ImmersiveAircraft + */ +@Mixin(ClientPacketListener.class) +public class ClientPacketListenerMixin { + + @Shadow + @Final + private Minecraft minecraft; + + @Shadow + private ClientLevel level; + + @Inject(method = "handleSetEntityPassengersPacket(Lnet/minecraft/network/protocol/game/ClientboundSetPassengersPacket;)V", at = @At("TAIL")) + public void handleSetEntityPassengersPacket(ClientboundSetPassengersPacket pPacket, CallbackInfo ci) { + Entity entity = this.level.getEntity(pPacket.getVehicle()); + if (entity == null) return; + + var player = this.minecraft.player; + assert player != null; + + boolean hasIndirectPassenger = entity.hasIndirectPassenger(this.minecraft.player); + for (int i : pPacket.getPassengers()) { + Entity passenger = this.level.getEntity(i); + if (passenger != null && (passenger == this.minecraft.player || hasIndirectPassenger)) { + if (entity instanceof VehicleEntity) { + this.minecraft.player.yRotO = entity.getYRot(); + this.minecraft.player.setYRot(entity.getYRot()); + this.minecraft.player.setYHeadRot(entity.getYRot()); + + Component component = Component.translatable("mount.onboard", ModKeyMappings.DISMOUNT.getTranslatedKeyMessage()); + this.minecraft.gui.setOverlayMessage(component, false); + this.minecraft.getNarrator().sayNow(component); + } + } + } + } +} diff --git a/src/main/resources/mixins.superbwarfare.json b/src/main/resources/mixins.superbwarfare.json index d9b1fad96..90825df36 100644 --- a/src/main/resources/mixins.superbwarfare.json +++ b/src/main/resources/mixins.superbwarfare.json @@ -10,6 +10,7 @@ ], "client": [ "CameraMixin", + "ClientPacketListenerMixin", "ClientPlayerEntityMixin", "GameRendererMixin", "ItemInHandLayerMixin",