diff --git a/.gitignore b/.gitignore index c476faf..c61f56e 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ bin/ # fabric run/ +runClient/ # java diff --git a/build.gradle b/build.gradle index ff80dc4..163f3a9 100644 --- a/build.gradle +++ b/build.gradle @@ -28,6 +28,12 @@ loom { } } + runs { + client { + runDir = "runClient" + } + } + } dependencies { diff --git a/src/main/java/net/mahmutkocas/mixin/ClientConnectionMixin.java b/src/main/java/net/mahmutkocas/mixin/ClientConnectionMixin.java index 9ae587d..c599ae3 100644 --- a/src/main/java/net/mahmutkocas/mixin/ClientConnectionMixin.java +++ b/src/main/java/net/mahmutkocas/mixin/ClientConnectionMixin.java @@ -1,10 +1,16 @@ package net.mahmutkocas.mixin; +import net.mahmutkocas.PlayerStateHandler; import net.minecraft.network.ClientConnection; import net.minecraft.network.listener.PacketListener; import net.minecraft.network.packet.Packet; +import net.minecraft.network.packet.c2s.play.CustomPayloadC2SPacket; import net.minecraft.server.network.ServerPlayNetworkHandler; +import org.slf4j.Logger; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -12,11 +18,31 @@ @Mixin(ClientConnection.class) public class ClientConnectionMixin { + @Shadow @Final private static Logger LOGGER; + @Inject(at = @At("HEAD"), method = "handlePacket", cancellable = true) private static void handlePacket(Packet packet, PacketListener listener, CallbackInfo ci) { if(!(listener instanceof ServerPlayNetworkHandler)) { return; } ServerPlayNetworkHandler handler = (ServerPlayNetworkHandler) listener; + + LOGGER.info("Packet class" + packet.getClass().getName()); + if(packet instanceof CustomPayloadC2SPacket) { + checkLock(handler.getPlayer().getUuidAsString(), ci); + if(ci.isCancelled()) { + CustomPayloadC2SPacket pack = (CustomPayloadC2SPacket) packet; + LOGGER.info("Denied packet: " + pack.getChannel() + " for Player: " + handler.getPlayer().getUuidAsString()); + } + } + } + + + @Unique + private static void checkLock(String uuid, CallbackInfo ci) { + if (!PlayerStateHandler.INSTANCE.isLocked(uuid)) { + return; + } + ci.cancel(); } }