From f4a04d7da619eaab1538a42ad2848e872c5bd5de Mon Sep 17 00:00:00 2001 From: 3944Realms Date: Wed, 23 Oct 2024 13:03:41 +0800 Subject: [PATCH] =?UTF-8?q?2024-10-23=20=E7=A7=BB=E9=99=A4=E5=AF=B9Minecra?= =?UTF-8?q?ft=E7=9A=84Mixin=E6=93=8D=E4=BD=9C=20=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E6=96=B0=E8=A7=84=E5=88=99=E6=9D=A5=E7=A6=81=E7=94=A8Minecraft?= =?UTF-8?q?=E7=9A=84=E7=A7=BB=E5=8A=A8=E8=BF=87=E5=BF=AB=E7=BA=A0=E6=AD=A3?= =?UTF-8?q?=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../Server/DisablePlayerMoveCheck.java | 25 +++++++++++++++++ .../LanguageAndOtherData/ModLangKeyValue.java | 3 ++ .../leashedplayer/mixin/MixinMinecraft.java | 28 ------------------- .../MixinServerGamePacketListenerImpl.java | 7 +++++ src/main/resources/leashedplayer.mixins.json | 1 - 6 files changed, 36 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/r3944realms/leashedplayer/content/gamerules/Server/DisablePlayerMoveCheck.java delete mode 100644 src/main/java/com/r3944realms/leashedplayer/mixin/MixinMinecraft.java diff --git a/gradle.properties b/gradle.properties index d80390e..b223e9f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ neogradle.subsystems.parchment.mappingsVersion=2024.07.28 # Environment Properties # You can find the latest versions here: https://projects.neoforged.net/neoforged/neoforge # The Minecraft version must agree with the Neo version to get a valid artifact -minecraft_version=1.21.1 +minecraft_version=1.21 # The Minecraft version range can use any release version of Minecraft as bounds. # Snapshots, pre-releases, and release candidates are not guaranteed to sort properly # as they do not follow standard versioning conventions. diff --git a/src/main/java/com/r3944realms/leashedplayer/content/gamerules/Server/DisablePlayerMoveCheck.java b/src/main/java/com/r3944realms/leashedplayer/content/gamerules/Server/DisablePlayerMoveCheck.java new file mode 100644 index 0000000..c7b2bfe --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/content/gamerules/Server/DisablePlayerMoveCheck.java @@ -0,0 +1,25 @@ +package com.r3944realms.leashedplayer.content.gamerules.Server; + +import com.r3944realms.leashedplayer.LeashedPlayer; +import com.r3944realms.leashedplayer.content.gamerules.Gamerules; +import com.r3944realms.leashedplayer.utils.Util; +import net.minecraft.world.level.GameRules; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; + +import static com.r3944realms.leashedplayer.content.gamerules.Gamerules.GAMERULE_REGISTRY; + +@EventBusSubscriber(modid = LeashedPlayer.MOD_ID, bus = EventBusSubscriber.Bus.MOD) +public class DisablePlayerMoveCheck { + public static final boolean DEFAULT_VALUE = true; + public static final String ID = Util.getGameruleName(DisablePlayerMoveCheck.class); + public static final String DESCRIPTION_KEY = Gamerules.getDescriptionKey(DisablePlayerMoveCheck.class); + public static final String NAME_KEY = Gamerules.getNameKey(DisablePlayerMoveCheck.class); + public static final GameRules.Category CATEGORY = GameRules.Category.PLAYER; + + @SubscribeEvent + public static void onCommonSetup(final FMLCommonSetupEvent event) { + GAMERULE_REGISTRY.registerGamerule(ID, CATEGORY, DEFAULT_VALUE); + } +} diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java index bb48405..99bbcad 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java @@ -4,6 +4,7 @@ import com.r3944realms.leashedplayer.content.commands.LeashCommand; import com.r3944realms.leashedplayer.content.commands.MotionCommand; import com.r3944realms.leashedplayer.content.entities.ModEntityRegister; import com.r3944realms.leashedplayer.content.gamerules.Server.CreateLeashFenceKnotEntityIfAbsent; +import com.r3944realms.leashedplayer.content.gamerules.Server.DisablePlayerMoveCheck; import com.r3944realms.leashedplayer.content.gamerules.Server.KeepLeashNotDropTime; import com.r3944realms.leashedplayer.content.gamerules.Server.TeleportWithLeashedPlayers; import com.r3944realms.leashedplayer.content.items.ModCreativeTab; @@ -56,10 +57,12 @@ public enum ModLangKeyValue { TELEPORT_WITH_LEASHED_PLAYERS(TeleportWithLeashedPlayers.NAME_KEY, ModPartEnum.NAME, "Teleport leashed player with player holder", "被拴玩家随玩家持有者传送", "被拴玩家随玩家持有者傳送" ,false), CREATE_LEASH_FENCE_KNOT_ENTITY_IF_ABSENT(CreateLeashFenceKnotEntityIfAbsent.NAME_KEY, ModPartEnum.NAME, "Create Leash Fence Knot Entity if absent", "如果缺失则创建拴绳结", "如果缺失則創建拴繩結", false), KEEP_LEASH_NOT_DROP_TIME(KeepLeashNotDropTime.NAME_KEY, ModPartEnum.NAME, "Keep leash alive Time", "保持拴绳不掉落的时间", "保持其不掉落的時間", false), + DISABLE_MOVE_CHECK(DisablePlayerMoveCheck.NAME_KEY, ModPartEnum.NAME, "Disable Player Move Check", "禁止检查玩家移动", "禁止檢查玩家移動", false), //GAME_RULE_DESCRIPTION TELEPORT_WITH_LEASHED_DESCRIPTION(TeleportWithLeashedPlayers.DESCRIPTION_KEY, ModPartEnum.DESCRIPTION, "Holder will teleport with their leashed players ", "传送时将被拴玩家与持有者一起传送", "將被拴玩家將隨持有者一起傳送" ,false), CREATE_LEASH_FENCE_KNOT_ENTITY_IF_ABSENT_DESCRIPTION(CreateLeashFenceKnotEntityIfAbsent.DESCRIPTION_KEY, ModPartEnum.DESCRIPTION, "Create LeashKnot Entity if it's absent on fence", "如果在栅栏处缺失拴绳结,则创建它", "如果在柵欄処缺失拴繩結,則創建它", false), KEEP_LEASH_NOT_DROP_TIME_DESCRIPTION(KeepLeashNotDropTime.DESCRIPTION_KEY, ModPartEnum.DESCRIPTION,"The time of Keep new leash which has far distance alive (Tick)", "当距离过远时,保持新建拴绳不掉落的时间 (刻)", "儅距離過遠時,保持其不掉落的時間(刻)", false), + DISABLE_MOVE_CHECK_DESCRIPTION(DisablePlayerMoveCheck.DESCRIPTION_KEY, ModPartEnum.DESCRIPTION, "Disable the player's movement Check And Correct it.", "禁止检查玩家移动并且纠正它","禁止檢查玩家移動並糾正他它", false), //ADV_NAME LEASH_START(ModAdvancementKey.LEASH_START.getNameKey(), ModPartEnum.NAME, "The Power of Traction", "牵引之力", "牽引之力", false), LEASH_LR_ARROW(ModAdvancementKey.LEASH_ARROW.getNameKey(), ModPartEnum.NAME, "Arrow with a Tether?" , "拴绳之箭?", "拴繩之箭?", false), diff --git a/src/main/java/com/r3944realms/leashedplayer/mixin/MixinMinecraft.java b/src/main/java/com/r3944realms/leashedplayer/mixin/MixinMinecraft.java deleted file mode 100644 index a56978d..0000000 --- a/src/main/java/com/r3944realms/leashedplayer/mixin/MixinMinecraft.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.r3944realms.leashedplayer.mixin; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.Options; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -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.CallbackInfoReturnable; - -import javax.annotation.Nullable; - -@Mixin(Minecraft.class) -public class MixinMinecraft { - @Shadow @Nullable public LocalPlayer player; - - @Shadow @Final public Options options; - - @Inject(method = "shouldEntityAppearGlowing", at = @At("HEAD"), cancellable = true) - private void shouldEntityAppearGlowing(Entity entity, CallbackInfoReturnable cir) { - cir.setReturnValue(entity.isCurrentlyGlowing() - || player != null && this.player.isSpectator() && options.keySpectatorOutlines.isDown() && entity.getType() == EntityType.PLAYER); - } -} diff --git a/src/main/java/com/r3944realms/leashedplayer/mixin/server/MixinServerGamePacketListenerImpl.java b/src/main/java/com/r3944realms/leashedplayer/mixin/server/MixinServerGamePacketListenerImpl.java index 5b5d4b7..24ed41f 100644 --- a/src/main/java/com/r3944realms/leashedplayer/mixin/server/MixinServerGamePacketListenerImpl.java +++ b/src/main/java/com/r3944realms/leashedplayer/mixin/server/MixinServerGamePacketListenerImpl.java @@ -3,6 +3,7 @@ package com.r3944realms.leashedplayer.mixin.server; import com.r3944realms.leashedplayer.content.gamerules.GameruleRegistry; import com.r3944realms.leashedplayer.content.gamerules.Server.TeleportWithLeashedPlayers; import com.r3944realms.leashedplayer.modInterface.PlayerLeashable; +import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.world.entity.Entity; @@ -53,4 +54,10 @@ public class MixinServerGamePacketListenerImpl { } } } + @SuppressWarnings("DiscouragedShift") + @Inject(method = {"handleMovePlayer"}, at = @At(value = "INVOKE",target = "Lorg/slf4j/Logger;warn(Ljava/lang/String;[Ljava/lang/Object;)V", ordinal = 0, shift = At.Shift.BEFORE), cancellable = true) + private void handleMovePlayer(ServerboundMovePlayerPacket pPacket, CallbackInfo ci) { + if(GameruleRegistry.getGameruleBoolValue(this.player.serverLevel(), TeleportWithLeashedPlayers.ID)) + ci.cancel(); + } } diff --git a/src/main/resources/leashedplayer.mixins.json b/src/main/resources/leashedplayer.mixins.json index cdcaea7..aba28ef 100644 --- a/src/main/resources/leashedplayer.mixins.json +++ b/src/main/resources/leashedplayer.mixins.json @@ -9,7 +9,6 @@ "server.MixinServerGamePacketListenerImpl" ], "client": [ - "MixinMinecraft", "client.MixinEntityRenderer", "client.MixinLevelRenderer", "client.MixinPlayerRenderer"