From dbf17397423d18fc9d51914e34fd084e0f95e649 Mon Sep 17 00:00:00 2001 From: Drex Date: Mon, 7 Aug 2023 16:50:27 +0200 Subject: [PATCH] Update to 23w31a --- build.gradle | 2 +- gradle.properties | 7 +- .../ServerCommonPacketListenerImplMixin.java | 64 +++++++++++++++++++ .../ServerGamePacketListenerImplMixin.java | 52 +-------------- src/main/resources/fabric.mod.json | 5 +- src/main/resources/vanish.mixins.json | 1 + 6 files changed, 72 insertions(+), 59 deletions(-) create mode 100644 src/main/java/me/drex/vanish/mixin/ServerCommonPacketListenerImplMixin.java diff --git a/build.gradle b/build.gradle index c4debda..e1e0cf9 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ dependencies { "fabric-resource-loader-v0" // server-translations-api ] apiModules.forEach { - include(modImplementation(fabricApi.module(it, project.fabric_version))) + modImplementation(fabricApi.module(it, project.fabric_version)) } modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" diff --git a/gradle.properties b/gradle.properties index 3a39d3d..538df03 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,20 +2,21 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.20 -loader_version=0.14.21 +minecraft_version=23w31a +loader_version=0.14.22 # Mod Properties mod_version=1.4.2 maven_group=me.drex archives_base_name=vanish # Dependencies -fabric_version=0.83.0+1.20 +fabric_version=0.86.1+1.20.2 mixin_extras_version=0.2.0-beta.8 permission_api_version=0.2-SNAPSHOT placeholder_api_version=2.1.1+1.20 player_data_api_version=0.2.2+1.19.3 translations_version=2.0.0-beta.2+1.19.4-pre2 configurate_hocon_version=4.1.2 +# Compat expanded_storage_version=10.0.0-beta.1+fabric bluemap_api_version=v2.5.1 styled_chat_version=2.2.0+1.20 diff --git a/src/main/java/me/drex/vanish/mixin/ServerCommonPacketListenerImplMixin.java b/src/main/java/me/drex/vanish/mixin/ServerCommonPacketListenerImplMixin.java new file mode 100644 index 0000000..ce73fb1 --- /dev/null +++ b/src/main/java/me/drex/vanish/mixin/ServerCommonPacketListenerImplMixin.java @@ -0,0 +1,64 @@ +package me.drex.vanish.mixin; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import me.drex.vanish.api.VanishAPI; +import net.minecraft.network.PacketSendListener; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket; +import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; +import net.minecraft.network.protocol.game.ClientboundTakeItemEntityPacket; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerCommonPacketListenerImpl; +import net.minecraft.server.network.ServerGamePacketListenerImpl; +import net.minecraft.world.entity.Entity; +import org.jetbrains.annotations.Nullable; +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; + +@Mixin(ServerCommonPacketListenerImpl.class) +public abstract class ServerCommonPacketListenerImplMixin { + + @Shadow @Final protected MinecraftServer server; + + @Shadow public abstract void send(Packet packet); + + @Inject( + method = "send(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketSendListener;Z)V", + at = @At("HEAD"), + cancellable = true + ) + public void vanish_modifyPackets(Packet packet, @Nullable PacketSendListener packetSendListener, boolean flush, CallbackInfo ci) { + if ((Object) this instanceof ServerGamePacketListenerImpl listener) { + if (packet instanceof ClientboundTakeItemEntityPacket takeItemEntityPacket) { + Entity entity = listener.player.level().getEntity(takeItemEntityPacket.getPlayerId()); + if (entity instanceof ServerPlayer actor && !VanishAPI.canSeePlayer(actor, listener.player)) { + this.send(new ClientboundRemoveEntitiesPacket(takeItemEntityPacket.getItemId())); + ci.cancel(); + } + } else if (packet instanceof ClientboundPlayerInfoUpdatePacket playerInfoPacket) { + ObjectArrayList modifiedEntries = new ObjectArrayList<>(); + int visible = 0; + for (ClientboundPlayerInfoUpdatePacket.Entry playerUpdate : playerInfoPacket.entries()) { + if (VanishAPI.canSeePlayer(server, playerUpdate.profileId(), listener.player)) { + visible++; + ServerPlayer player = server.getPlayerList().getPlayer(playerUpdate.profileId()); + if (player != null) modifiedEntries.add(player); + } + } + if (visible != playerInfoPacket.entries().size()) { + if (!modifiedEntries.isEmpty()) { + this.send(new ClientboundPlayerInfoUpdatePacket(playerInfoPacket.actions(), modifiedEntries)); + } + ci.cancel(); + } + } + } + } + + +} diff --git a/src/main/java/me/drex/vanish/mixin/ServerGamePacketListenerImplMixin.java b/src/main/java/me/drex/vanish/mixin/ServerGamePacketListenerImplMixin.java index 3f481d3..90f3a26 100644 --- a/src/main/java/me/drex/vanish/mixin/ServerGamePacketListenerImplMixin.java +++ b/src/main/java/me/drex/vanish/mixin/ServerGamePacketListenerImplMixin.java @@ -2,26 +2,14 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; import me.drex.vanish.api.VanishAPI; -import net.minecraft.network.PacketSendListener; import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket; -import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket; -import net.minecraft.network.protocol.game.ClientboundTakeItemEntityPacket; -import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.network.ServerGamePacketListenerImpl; import net.minecraft.server.players.PlayerList; -import net.minecraft.world.entity.Entity; -import org.jetbrains.annotations.Nullable; -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; @Mixin(ServerGamePacketListenerImpl.class) public abstract class ServerGamePacketListenerImplMixin { @@ -29,46 +17,8 @@ public abstract class ServerGamePacketListenerImplMixin { @Shadow public ServerPlayer player; - @Shadow - public abstract void send(Packet packet); - - @Shadow - @Final - private MinecraftServer server; - - @Inject( - method = "send(Lnet/minecraft/network/protocol/Packet;Lnet/minecraft/network/PacketSendListener;)V", - at = @At("HEAD"), - cancellable = true - ) - public void vanish_modifyPackets(Packet packet, @Nullable PacketSendListener packetSendListener, CallbackInfo ci) { - if (packet instanceof ClientboundTakeItemEntityPacket takeItemEntityPacket) { - Entity entity = this.player.level().getEntity(takeItemEntityPacket.getPlayerId()); - if (entity instanceof ServerPlayer actor && !VanishAPI.canSeePlayer(actor, this.player)) { - this.send(new ClientboundRemoveEntitiesPacket(takeItemEntityPacket.getItemId())); - ci.cancel(); - } - } else if (packet instanceof ClientboundPlayerInfoUpdatePacket playerInfoPacket) { - ObjectArrayList modifiedEntries = new ObjectArrayList<>(); - int visible = 0; - for (ClientboundPlayerInfoUpdatePacket.Entry playerUpdate : playerInfoPacket.entries()) { - if (VanishAPI.canSeePlayer(server, playerUpdate.profileId(), this.player)) { - visible++; - ServerPlayer player = server.getPlayerList().getPlayer(playerUpdate.profileId()); - if (player != null) modifiedEntries.add(player); - } - } - if (visible != playerInfoPacket.entries().size()) { - if (!modifiedEntries.isEmpty()) { - this.send(new ClientboundPlayerInfoUpdatePacket(playerInfoPacket.actions(), modifiedEntries)); - } - ci.cancel(); - } - } - } - @WrapOperation( - method = "onDisconnect", + method = "removePlayerFromWorld", at = @At( value = "INVOKE", target = "Lnet/minecraft/server/players/PlayerList;broadcastSystemMessage(Lnet/minecraft/network/chat/Component;Z)V" diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 39e91ea..f3a2e36 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -32,10 +32,7 @@ ], "depends": { "fabricloader": ">=0.14.8", - "fabric-command-api-v2": "*", - "fabric-lifecycle-events-v1": "*", - "fabric-message-api-v1": "*", - "minecraft": ">=1.20", + "fabric-api": "*", "java": ">=17" }, "breaks": { diff --git a/src/main/resources/vanish.mixins.json b/src/main/resources/vanish.mixins.json index 3a7b258..7a3ba1d 100644 --- a/src/main/resources/vanish.mixins.json +++ b/src/main/resources/vanish.mixins.json @@ -19,6 +19,7 @@ "MinecraftServerMixin", "PlayerAdvancementsMixin", "PlayerListMixin", + "ServerCommonPacketListenerImplMixin", "ServerGamePacketListenerImplMixin", "ServerLevelMixin", "ServerPlayerMixin",