From 2440803891cecd90e7e1fde1c950ad0475dcc52c Mon Sep 17 00:00:00 2001 From: Fox2Code Date: Thu, 23 May 2024 15:11:12 +0200 Subject: [PATCH] Update 1.2.45 --- .../mixins/MixinEntityClientPlayerMP.java | 11 ++++-- .../client/mixins/MixinEntityPlayerSP.java | 6 ++++ .../client/mixins/MixinGuiDebug.java | 5 --- .../client/mixins/MixinNetClientHandler.java | 33 ++++++++++++----- .../network/NetClientHandlerExtensions.java | 7 ---- .../foxloader/loader/ClientModLoader.java | 12 +++---- .../loader/LoaderNetworkManager.java | 9 ++--- .../com/fox2code/foxloader/loader/Mod.java | 31 ++++++++++++++-- .../foxloader/loader/ModContainer.java | 17 ++++----- .../foxloader/network/NetworkConnection.java | 30 ++++++++++++++++ .../foxloader/network/NetworkPlayer.java | 5 +++ gradle.properties | 2 +- .../foxloader/loader/ServerModLoader.java | 12 +++++-- .../server/mixins/MixinEntityPlayerMP.java | 6 ++++ .../server/mixins/MixinNetServerHandler.java | 36 ++++++++++++++++--- 15 files changed, 169 insertions(+), 53 deletions(-) delete mode 100644 client/src/main/java/com/fox2code/foxloader/client/network/NetClientHandlerExtensions.java create mode 100644 common/src/main/java/com/fox2code/foxloader/network/NetworkConnection.java diff --git a/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinEntityClientPlayerMP.java b/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinEntityClientPlayerMP.java index 73c8d0b..8b4013c 100644 --- a/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinEntityClientPlayerMP.java +++ b/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinEntityClientPlayerMP.java @@ -1,7 +1,7 @@ package com.fox2code.foxloader.client.mixins; -import com.fox2code.foxloader.client.network.NetClientHandlerExtensions; import com.fox2code.foxloader.loader.ModContainer; +import com.fox2code.foxloader.network.NetworkConnection; import com.fox2code.foxloader.network.NetworkPlayer; import net.minecraft.client.Minecraft; import net.minecraft.src.client.Session; @@ -31,6 +31,11 @@ public void onNewMixinEntityClientPlayerMP( } + @Override + public NetworkConnection getNetworkConnection() { + return (NetworkConnection) this.sendQueue; + } + @Override public ConnectionType getConnectionType() { return ConnectionType.CLIENT_ONLY; @@ -56,7 +61,7 @@ public void displayChatMessage(String chatMessage) { @Override public boolean hasFoxLoader() { - return sendQueue != null && ((NetClientHandlerExtensions) sendQueue).isFoxLoader(); + return sendQueue != null && ((NetworkConnection) sendQueue).hasFoxLoader(); } @Override @@ -72,7 +77,7 @@ public boolean isOperator() { @Override public boolean isConnected() { return sendQueue != null && Minecraft.getInstance().isMultiplayerWorld() && - !((NetClientHandlerExtensions) sendQueue).isDisconnected(); + ((NetworkConnection) sendQueue).isConnected(); } @Override diff --git a/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinEntityPlayerSP.java b/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinEntityPlayerSP.java index 005e240..8cc3fd8 100644 --- a/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinEntityPlayerSP.java +++ b/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinEntityPlayerSP.java @@ -2,6 +2,7 @@ import com.fox2code.foxloader.loader.ClientMod; import com.fox2code.foxloader.loader.ModContainer; +import com.fox2code.foxloader.network.NetworkConnection; import com.fox2code.foxloader.network.NetworkPlayer; import com.fox2code.foxloader.registry.RegisteredItemStack; import net.minecraft.client.Minecraft; @@ -22,6 +23,11 @@ public MixinEntityPlayerSP(World var1) { super(var1); } + @Override + public NetworkConnection getNetworkConnection() { + return null; + } + @Override public ConnectionType getConnectionType() { return ConnectionType.SINGLE_PLAYER; diff --git a/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinGuiDebug.java b/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinGuiDebug.java index 22190c7..fcb5b86 100644 --- a/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinGuiDebug.java +++ b/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinGuiDebug.java @@ -1,11 +1,8 @@ package com.fox2code.foxloader.client.mixins; -import com.fox2code.foxloader.client.network.NetClientHandlerExtensions; import com.fox2code.foxloader.launcher.BuildConfig; import com.fox2code.foxloader.loader.ClientModLoader; -import com.fox2code.foxloader.network.SidedMetadataAPI; import net.minecraft.client.Minecraft; -import net.minecraft.fox2code.ChatColors; import net.minecraft.src.client.gui.FontRenderer; import net.minecraft.src.client.gui.GuiDebug; import org.lwjgl.input.Keyboard; @@ -14,8 +11,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -import java.util.Map; - @Mixin(GuiDebug.class) public class MixinGuiDebug { @Shadow private Minecraft mc; diff --git a/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinNetClientHandler.java b/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinNetClientHandler.java index a69b57b..052f090 100644 --- a/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinNetClientHandler.java +++ b/client/src/main/java/com/fox2code/foxloader/client/mixins/MixinNetClientHandler.java @@ -1,9 +1,9 @@ package com.fox2code.foxloader.client.mixins; -import com.fox2code.foxloader.client.network.NetClientHandlerExtensions; import com.fox2code.foxloader.loader.ClientModLoader; import com.fox2code.foxloader.loader.ModContainer; import com.fox2code.foxloader.loader.ModLoader; +import com.fox2code.foxloader.network.NetworkConnection; import com.fox2code.foxloader.network.NetworkPlayer; import com.fox2code.foxloader.registry.GameRegistryClient; import net.minecraft.client.Minecraft; @@ -18,12 +18,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(NetClientHandler.class) -public class MixinNetClientHandler implements NetClientHandlerExtensions { +public abstract class MixinNetClientHandler implements NetworkConnection { @Shadow private boolean disconnected; @Shadow private NetworkManager netManager; @Unique boolean isFoxLoader = false; @Unique boolean preemptive = true; + @Shadow public abstract void addToSendQueue(Packet packet); + @Unique private void preemptivelySendClientHello() { if (this.preemptive) { @@ -85,27 +87,40 @@ public void onHandlePickupSpawn(Packet5PlayerInventory var1, CallbackInfo ci) { @Inject(method = "handlePluginMessage", at = @At("HEAD")) public void onHandlePluginMessage(Packet250PluginMessage packet250, CallbackInfo ci) { - NetworkPlayer networkPlayer = (NetworkPlayer) - Minecraft.getInstance().thePlayer; if (ModLoader.FOX_LOADER_MOD_ID.equals(packet250.channel) && !this.isFoxLoader) { ModLoader.getModLoaderLogger().info("Got FoxLoader packet"); this.isFoxLoader = true; this.preemptivelySendClientHello(); } ModContainer modContainer = ModLoader.getModContainer(packet250.channel); - if (networkPlayer != null && modContainer != null && packet250.data != null) { + if (modContainer != null && packet250.data != null) { ModLoader.getModLoaderLogger().info("Processing FoxLoader packet"); - modContainer.notifyReceiveServerPacket(networkPlayer, packet250.data); + modContainer.notifyReceiveServerPacket(this, packet250.data); } } @Override - public boolean isFoxLoader() { + public boolean hasFoxLoader() { return this.isFoxLoader; } @Override - public boolean isDisconnected() { - return this.disconnected; + public boolean isConnected() { + return !this.disconnected; + } + + @Override + public void sendNetworkData(ModContainer modContainer, byte[] data) { + this.addToSendQueue(new Packet250PluginMessage(modContainer.id, data)); + } + + @Override + public NetworkPlayer getNetworkPlayer() { + return (NetworkPlayer) Minecraft.getInstance().thePlayer; + } + + @Override + public void kick(String message) { + throw new IllegalStateException("kick cannot be used client-side"); } } diff --git a/client/src/main/java/com/fox2code/foxloader/client/network/NetClientHandlerExtensions.java b/client/src/main/java/com/fox2code/foxloader/client/network/NetClientHandlerExtensions.java deleted file mode 100644 index 26f5c8f..0000000 --- a/client/src/main/java/com/fox2code/foxloader/client/network/NetClientHandlerExtensions.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.fox2code.foxloader.client.network; - -public interface NetClientHandlerExtensions { - boolean isFoxLoader(); - - boolean isDisconnected(); -} diff --git a/client/src/main/java/com/fox2code/foxloader/loader/ClientModLoader.java b/client/src/main/java/com/fox2code/foxloader/loader/ClientModLoader.java index 5db1964..68f913e 100644 --- a/client/src/main/java/com/fox2code/foxloader/loader/ClientModLoader.java +++ b/client/src/main/java/com/fox2code/foxloader/loader/ClientModLoader.java @@ -1,6 +1,5 @@ package com.fox2code.foxloader.loader; -import com.fox2code.foxloader.client.network.NetClientHandlerExtensions; import com.fox2code.foxloader.launcher.BuildConfig; import com.fox2code.foxloader.launcher.FoxLauncher; import com.fox2code.foxloader.launcher.LauncherType; @@ -10,10 +9,10 @@ import com.fox2code.foxloader.launcher.utils.SourceUtil; import com.fox2code.foxloader.loader.packet.ClientHello; import com.fox2code.foxloader.loader.packet.ServerHello; +import com.fox2code.foxloader.network.NetworkConnection; import com.fox2code.foxloader.network.NetworkPlayer; import com.fox2code.foxloader.network.SidedMetadataAPI; import com.fox2code.foxloader.registry.GameRegistryClient; -import com.fox2code.foxloader.registry.RegisteredItem; import com.fox2code.foxloader.updater.UpdateManager; import net.minecraft.client.Minecraft; import net.minecraft.fox2code.ChatColors; @@ -21,7 +20,6 @@ import net.minecraft.src.client.gui.StringTranslate; import net.minecraft.src.client.packets.NetworkManager; import net.minecraft.src.client.packets.Packet250PluginMessage; -import net.minecraft.src.game.item.Item; import net.minecraft.src.game.item.ItemStack; import org.lwjgl.opengl.GL11; @@ -87,18 +85,18 @@ public void onServerStart(NetworkPlayer.ConnectionType connectionType) { } @Override - public void onReceiveServerPacket(NetworkPlayer networkPlayer, byte[] data) { + public void onReceiveServerPacket(NetworkConnection networkPlayer, byte[] data) { ModLoader.foxLoader.logger.info("Received server packet"); LoaderNetworkManager.executeServerPacketData(networkPlayer, data); } @Override - void loaderHandleServerHello(NetworkPlayer networkPlayer, ServerHello serverHello) { + void loaderHandleServerHello(NetworkConnection networkConnection, ServerHello serverHello) { ModLoader.foxLoader.logger.info("Initializing id translator"); GameRegistryClient.initializeMappings(serverHello); ModLoader.foxLoader.logger.info("Ids translated!"); if (!didPreemptiveNetworking) { - networkPlayer.sendNetworkData(ModLoader.foxLoader, clientHello); + networkConnection.sendNetworkData(ModLoader.foxLoader, clientHello); } else { didPreemptiveNetworking = false; } @@ -280,7 +278,7 @@ public static String getColoredServerNameDebugExt() { if (serverName == null) { if (metadata.containsKey(SidedMetadataAPI.KEY_FOXLOADER_VERSION)) { serverName = "FoxLoader " + metadata.get(SidedMetadataAPI.KEY_FOXLOADER_VERSION); - } else if (((NetClientHandlerExtensions) Minecraft.getInstance().getSendQueue()).isFoxLoader()) { + } else if (((NetworkConnection) Minecraft.getInstance().getSendQueue()).hasFoxLoader()) { serverName = ChatColors.DARK_RED + "Obsolete FoxLoader" + ChatColors.GRAY; } else { serverName = "ReIndev " + BuildConfig.REINDEV_VERSION; diff --git a/common/src/main/java/com/fox2code/foxloader/loader/LoaderNetworkManager.java b/common/src/main/java/com/fox2code/foxloader/loader/LoaderNetworkManager.java index 23d70cb..1f4e077 100644 --- a/common/src/main/java/com/fox2code/foxloader/loader/LoaderNetworkManager.java +++ b/common/src/main/java/com/fox2code/foxloader/loader/LoaderNetworkManager.java @@ -3,6 +3,7 @@ import com.fox2code.foxloader.loader.packet.ClientHello; import com.fox2code.foxloader.loader.packet.FoxPacket; import com.fox2code.foxloader.loader.packet.ServerHello; +import com.fox2code.foxloader.network.NetworkConnection; import com.fox2code.foxloader.network.NetworkPlayer; import com.fox2code.foxloader.network.io.NetworkDataInputStream; import com.fox2code.foxloader.network.io.NetworkDataOutputStream; @@ -12,7 +13,7 @@ import java.util.zip.*; final class LoaderNetworkManager { - static void executeClientPacketData(NetworkPlayer networkPlayer, byte[] data) { + static void executeClientPacketData(NetworkConnection networkConnection, byte[] data) { try (DataInputStream dataInputStream = new NetworkDataInputStream(new ByteArrayInputStream(data))) { int packetId = dataInputStream.readUnsignedByte(); @@ -25,7 +26,7 @@ static void executeClientPacketData(NetworkPlayer networkPlayer, byte[] data) { clientHello.readData(dataInputStream); ModLoader.foxLoader.getMod() .loaderHandleClientHello( - networkPlayer, clientHello); + networkConnection, clientHello); break; } } catch (IOException ignored) {} @@ -45,7 +46,7 @@ static void sendClientPacketData(NetworkPlayer networkPlayer, FoxPacket foxPacke networkPlayer.sendNetworkData(ModLoader.foxLoader, byteArrayOutputStream.toByteArray()); } - static void executeServerPacketData(NetworkPlayer networkPlayer, byte[] data) { + static void executeServerPacketData(NetworkConnection networkConnection, byte[] data) { InputStream inputStream = new ByteArrayInputStream(data); try { int compressed = inputStream.read(); @@ -76,7 +77,7 @@ static void executeServerPacketData(NetworkPlayer networkPlayer, byte[] data) { serverHello.readData(dataInputStream); ModLoader.foxLoader.getMod() .loaderHandleServerHello( - networkPlayer, serverHello); + networkConnection, serverHello); break; } } catch (IOException e) { diff --git a/common/src/main/java/com/fox2code/foxloader/loader/Mod.java b/common/src/main/java/com/fox2code/foxloader/loader/Mod.java index d9dc4cd..1c5dac2 100644 --- a/common/src/main/java/com/fox2code/foxloader/loader/Mod.java +++ b/common/src/main/java/com/fox2code/foxloader/loader/Mod.java @@ -2,6 +2,7 @@ import com.fox2code.foxloader.loader.packet.ClientHello; import com.fox2code.foxloader.loader.packet.ServerHello; +import com.fox2code.foxloader.network.NetworkConnection; import com.fox2code.foxloader.network.NetworkPlayer; import com.fox2code.foxloader.registry.*; @@ -78,11 +79,37 @@ public void onCameraAndRenderUpdated(float partialTick) {} /** * When server receive client packet. */ + public void onReceiveClientPacket(NetworkConnection networkConnection, byte[] data) { + NetworkPlayer networkPlayer = networkConnection.getNetworkPlayer(); + if (networkPlayer != null) { + this.onReceiveClientPacket(networkPlayer, data); + } else { + this.getLogger().warning("Received preemptive client packet, but failed to translate to non preemptive"); + } + } + + /** + * When server receive client packet. + */ + @Deprecated public void onReceiveClientPacket(NetworkPlayer networkPlayer, byte[] data) {} /** * When client receive server packet. */ + public void onReceiveServerPacket(NetworkConnection networkConnection, byte[] data) { + NetworkPlayer networkPlayer = networkConnection.getNetworkPlayer(); + if (networkPlayer != null) { + this.onReceiveServerPacket(networkPlayer, data); + } else { + this.getLogger().warning("Received preemptive server packet, but failed to translate to non preemptive"); + } + } + + /** + * When client receive server packet. + */ + @Deprecated public void onReceiveServerPacket(NetworkPlayer networkPlayer, byte[] data) {} /** @@ -243,8 +270,8 @@ public void registerShapelessRecipe(RegisteredItemStack result, GameRegistry.Ing } // For internal use only - void loaderHandleServerHello(NetworkPlayer networkPlayer, ServerHello serverHello) {} - void loaderHandleClientHello(NetworkPlayer networkPlayer, ClientHello clientHello) {} + void loaderHandleServerHello(NetworkConnection networkConnection, ServerHello serverHello) {} + void loaderHandleClientHello(NetworkConnection networkPlayer, ClientHello clientHello) {} void loaderHandleDoFoxLoaderUpdate(String version, String url) throws IOException { System.err.println("Unhandled loaderHandleDoFoxLoaderUpdate()"); } diff --git a/common/src/main/java/com/fox2code/foxloader/loader/ModContainer.java b/common/src/main/java/com/fox2code/foxloader/loader/ModContainer.java index 42db996..1d7e498 100644 --- a/common/src/main/java/com/fox2code/foxloader/loader/ModContainer.java +++ b/common/src/main/java/com/fox2code/foxloader/loader/ModContainer.java @@ -7,6 +7,7 @@ import com.fox2code.foxloader.loader.lua.LuaVMHelper; import com.fox2code.foxloader.loader.packet.ClientHello; import com.fox2code.foxloader.loader.transformer.PreClassTransformer; +import com.fox2code.foxloader.network.NetworkConnection; import com.fox2code.foxloader.network.NetworkPlayer; import com.fox2code.foxloader.registry.RegisteredEntity; import com.fox2code.foxloader.registry.RegisteredItemStack; @@ -274,22 +275,22 @@ private Mod initializeMod(String clsName) throws ReflectiveOperationException { return mod; } - public void notifyReceiveClientPacket(NetworkPlayer networkPlayer, byte[] data) { + public void notifyReceiveClientPacket(NetworkConnection networkConnection, byte[] data) { if (commonMod != null) - commonMod.onReceiveClientPacket(networkPlayer, data); + commonMod.onReceiveClientPacket(networkConnection, data); if (clientMod != null) - clientMod.onReceiveClientPacket(networkPlayer, data); + clientMod.onReceiveClientPacket(networkConnection, data); if (serverMod != null) - serverMod.onReceiveClientPacket(networkPlayer, data); + serverMod.onReceiveClientPacket(networkConnection, data); } - public void notifyReceiveServerPacket(NetworkPlayer networkPlayer, byte[] data) { + public void notifyReceiveServerPacket(NetworkConnection networkConnection, byte[] data) { if (commonMod != null) - commonMod.onReceiveServerPacket(networkPlayer, data); + commonMod.onReceiveServerPacket(networkConnection, data); if (clientMod != null) - clientMod.onReceiveServerPacket(networkPlayer, data); + clientMod.onReceiveServerPacket(networkConnection, data); if (serverMod != null) - serverMod.onReceiveServerPacket(networkPlayer, data); + serverMod.onReceiveServerPacket(networkConnection, data); } void notifyNetworkPlayerJoined(NetworkPlayer networkPlayer) { diff --git a/common/src/main/java/com/fox2code/foxloader/network/NetworkConnection.java b/common/src/main/java/com/fox2code/foxloader/network/NetworkConnection.java new file mode 100644 index 0000000..bfeb6d8 --- /dev/null +++ b/common/src/main/java/com/fox2code/foxloader/network/NetworkConnection.java @@ -0,0 +1,30 @@ +package com.fox2code.foxloader.network; + +import com.fox2code.foxloader.loader.ModContainer; + +public interface NetworkConnection { + /** + * Send network data to remote player + */ + default void sendNetworkData(ModContainer modContainer, byte[] data) { throw new RuntimeException(); } + + /** + * Get the network player is available + */ + default NetworkPlayer getNetworkPlayer() { throw new RuntimeException(); } + + /** + * @return if the remote party has fox loader. + */ + default boolean hasFoxLoader() { throw new RuntimeException(); } + + /** + * @return if the player is currently connected + */ + default boolean isConnected() { throw new RuntimeException(); } + + /** + * Will kick the player. + */ + default void kick(String message) { throw new RuntimeException(); } +} diff --git a/common/src/main/java/com/fox2code/foxloader/network/NetworkPlayer.java b/common/src/main/java/com/fox2code/foxloader/network/NetworkPlayer.java index 8158f02..c26f20a 100644 --- a/common/src/main/java/com/fox2code/foxloader/network/NetworkPlayer.java +++ b/common/src/main/java/com/fox2code/foxloader/network/NetworkPlayer.java @@ -11,6 +11,11 @@ public interface NetworkPlayer extends RegisteredEntityLiving, RegisteredCommand */ byte[] NULL_DATA = new byte[0]; + /** + * Get player network connection if available + */ + default NetworkConnection getNetworkConnection() { throw new RuntimeException(); } + /** * Get the connection type of the object. */ diff --git a/gradle.properties b/gradle.properties index 4233d91..742757f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.parallel=true org.gradle.jvmargs=-Xmx1024m -XX:-UseGCOverheadLimit -Dfile.encoding=UTF-8 # FoxLoader properties -foxloader.version=1.2.44 +foxloader.version=1.2.45 foxloader.lastReIndevTransformerChanges=1.2.39 # https://www.jitpack.io/#com.fox2code/FoxLoader diff --git a/server/src/main/java/com/fox2code/foxloader/loader/ServerModLoader.java b/server/src/main/java/com/fox2code/foxloader/loader/ServerModLoader.java index d1e630b..e22a0fc 100644 --- a/server/src/main/java/com/fox2code/foxloader/loader/ServerModLoader.java +++ b/server/src/main/java/com/fox2code/foxloader/loader/ServerModLoader.java @@ -1,6 +1,7 @@ package com.fox2code.foxloader.loader; import com.fox2code.foxloader.loader.packet.ClientHello; +import com.fox2code.foxloader.network.NetworkConnection; import com.fox2code.foxloader.network.NetworkPlayer; import com.fox2code.foxloader.registry.CommandCompat; import com.fox2code.foxloader.registry.GameRegistryServer; @@ -81,13 +82,18 @@ public static void notifyRun() { } @Override - public void onReceiveClientPacket(NetworkPlayer networkPlayer, byte[] data) { + public void onReceiveClientPacket(NetworkConnection networkConnection, byte[] data) { if (data.length == 0) return; - LoaderNetworkManager.executeClientPacketData(networkPlayer, data); + LoaderNetworkManager.executeClientPacketData(networkConnection, data); } @Override - void loaderHandleClientHello(NetworkPlayer networkPlayer, ClientHello clientHello) { + void loaderHandleClientHello(NetworkConnection networkConnection, ClientHello clientHello) { + NetworkPlayer networkPlayer = networkConnection.getNetworkPlayer(); + if (networkPlayer == null) { + networkConnection.kick("Preemptive networking edge case"); + return; + } ((NetworkPlayerImpl) networkPlayer).notifyClientHello(); for (ModContainer modContainer : ModLoader.modContainers.values()) { modContainer.notifyNetworkPlayerHello(networkPlayer, clientHello); diff --git a/server/src/main/java/com/fox2code/foxloader/server/mixins/MixinEntityPlayerMP.java b/server/src/main/java/com/fox2code/foxloader/server/mixins/MixinEntityPlayerMP.java index 6b1b086..9b79eb7 100644 --- a/server/src/main/java/com/fox2code/foxloader/server/mixins/MixinEntityPlayerMP.java +++ b/server/src/main/java/com/fox2code/foxloader/server/mixins/MixinEntityPlayerMP.java @@ -2,6 +2,7 @@ import com.fox2code.foxloader.loader.ModContainer; import com.fox2code.foxloader.loader.ServerMod; +import com.fox2code.foxloader.network.NetworkConnection; import com.fox2code.foxloader.network.NetworkPlayer; import com.fox2code.foxloader.registry.RegisteredItemStack; import com.fox2code.foxloader.server.network.NetServerHandlerAccessor; @@ -33,6 +34,11 @@ public void teleportRegistered(double x, double y, double z) { this.playerNetServerHandler.teleportTo(x, y, z, this.rotationYaw, this.rotationPitch); } + @Override + public NetworkConnection getNetworkConnection() { + return (NetworkConnection) this.playerNetServerHandler; + } + @Override public ConnectionType getConnectionType() { return ConnectionType.SERVER_ONLY; diff --git a/server/src/main/java/com/fox2code/foxloader/server/mixins/MixinNetServerHandler.java b/server/src/main/java/com/fox2code/foxloader/server/mixins/MixinNetServerHandler.java index 7cc5632..dfd2af0 100644 --- a/server/src/main/java/com/fox2code/foxloader/server/mixins/MixinNetServerHandler.java +++ b/server/src/main/java/com/fox2code/foxloader/server/mixins/MixinNetServerHandler.java @@ -2,6 +2,7 @@ import com.fox2code.foxloader.loader.ModContainer; import com.fox2code.foxloader.loader.ModLoader; +import com.fox2code.foxloader.network.NetworkConnection; import com.fox2code.foxloader.network.NetworkPlayer; import com.fox2code.foxloader.server.network.NetServerHandlerAccessor; import net.minecraft.src.game.entity.player.EntityPlayerMP; @@ -18,8 +19,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(NetServerHandler.class) -public abstract class MixinNetServerHandler implements NetServerHandlerAccessor { +public abstract class MixinNetServerHandler implements NetServerHandlerAccessor, NetworkConnection { @Shadow private EntityPlayerMP playerEntity; + @Shadow public boolean connectionClosed; + + @Shadow public abstract void sendPacket(Packet var1); + + @Shadow public abstract void kickPlayer(String var1); + @Unique private boolean hasFoxLoader; @Unique private boolean hasClientHello; @Unique private String kickMessage; @@ -49,18 +56,39 @@ public void notifyClientHello() { this.hasClientHello = true; } + @Override + public boolean isConnected() { + return !this.connectionClosed; + } + + @Override + public void sendNetworkData(ModContainer modContainer, byte[] data) { + this.sendPacket(new Packet250PluginMessage(modContainer.id, data)); + } + + @Override + public NetworkPlayer getNetworkPlayer() { + return (NetworkPlayer) this.playerEntity; + } + + @Override + public void kick(String message) { + if (!this.connectionClosed) { + this.kickPlayer(message); + } + } + @Inject(method = "handlePluginMessage", at = @At("HEAD")) public void onHandlePluginMessage(Packet250PluginMessage packet250, CallbackInfo ci) { - NetworkPlayer networkPlayer = (NetworkPlayer) this.playerEntity; // Stop client that are not modded from sending modded packets // Also do not allow modded packet when client didn't finish connecting yet. - if (networkPlayer == null || !(this.hasClientHello || // Make exception for FoxLoader packets + if (this.playerEntity == null || !(this.hasClientHello || // Make exception for FoxLoader packets (this.hasFoxLoader && ModLoader.FOX_LOADER_MOD_ID.equals(packet250.channel)))) { return; } ModContainer modContainer = ModLoader.getModContainer(packet250.channel); if (modContainer != null && packet250.data != null) { - modContainer.notifyReceiveClientPacket(networkPlayer, packet250.data); + modContainer.notifyReceiveClientPacket(this, packet250.data); } }