From 92b7ed11825e0a495ff168f4c2224f26e9d382d9 Mon Sep 17 00:00:00 2001 From: Christian Date: Sat, 11 Aug 2012 11:01:18 -0400 Subject: [PATCH] Lost of work to try and complete ML support - probably still bits missing, but mostly there --- .../cpw/mods/fml/client/FMLClientHandler.java | 6 +++ fml/client/net/minecraft/src/BaseMod.java | 11 ++++- fml/client/net/minecraft/src/ModLoader.java | 4 +- .../cpw/mods/fml/common/FMLCommonHandler.java | 3 +- .../cpw/mods/fml/common/IFMLSidedHandler.java | 4 +- .../fml/common/modloader/BaseModProxy.java | 26 ++++++---- .../modloader/ModLoaderConnectionHandler.java | 24 +++++---- .../fml/common/modloader/ModLoaderHelper.java | 11 +++-- .../modloader/ModLoaderModContainer.java | 2 + .../modloader/ModLoaderPacketHandler.java | 10 +++- .../fml/common/network/FMLNetworkHandler.java | 4 +- .../common/network/IConnectionHandler.java | 24 ++++----- .../fml/common/network/NetworkRegistry.java | 4 +- .../fml/common/registry/BlockTracker.java | 49 +++++++++++++++++++ .../fml/common/registry/GameRegistry.java | 3 +- .../fml/common/registry/LanguageRegistry.java | 16 +++++- 16 files changed, 150 insertions(+), 51 deletions(-) create mode 100644 fml/common/cpw/mods/fml/common/registry/BlockTracker.java diff --git a/fml/client/cpw/mods/fml/client/FMLClientHandler.java b/fml/client/cpw/mods/fml/client/FMLClientHandler.java index 7ec13e685..d608feb67 100644 --- a/fml/client/cpw/mods/fml/client/FMLClientHandler.java +++ b/fml/client/cpw/mods/fml/client/FMLClientHandler.java @@ -396,4 +396,10 @@ public class FMLClientHandler implements IFMLSidedHandler { // NOOP } + + @Override + public MinecraftServer getServer() + { + return client.func_71401_C(); + } } diff --git a/fml/client/net/minecraft/src/BaseMod.java b/fml/client/net/minecraft/src/BaseMod.java index f9ec69c04..2ce6d88df 100644 --- a/fml/client/net/minecraft/src/BaseMod.java +++ b/fml/client/net/minecraft/src/BaseMod.java @@ -300,6 +300,7 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr * * @param text */ + @Override public void receiveChatPacket(String text) { // TODO @@ -311,6 +312,7 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr * * @param packet */ + @Override public void receiveCustomPacket(Packet250CustomPayload packet) { // TODO @@ -332,10 +334,12 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr } - public void serverConnect(NetClientHandler handler) { + @Override + public void serverConnect(NetHandler handler) { } + @Override public void serverDisconnect() { } @@ -375,6 +379,7 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr * @param source * @param payload */ + @Override public void onPacket250Received(EntityPlayer source, Packet250CustomPayload payload) { } @@ -405,6 +410,7 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr * * @param player */ + @Override public void onClientLogin(EntityPlayer player) { } @@ -414,7 +420,8 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr * * @param player */ - public void onClientLogout(EntityPlayer player) + @Override + public void onClientLogout(NetworkManager mgr) { } diff --git a/fml/client/net/minecraft/src/ModLoader.java b/fml/client/net/minecraft/src/ModLoader.java index b46a58779..18b5d0fd6 100644 --- a/fml/client/net/minecraft/src/ModLoader.java +++ b/fml/client/net/minecraft/src/ModLoader.java @@ -585,9 +585,7 @@ public class ModLoader } /** - * Register the mod for packets on this channel. This only registers the - * channel with Forge Mod Loader, not with clients connecting- use - * BaseMod.onClientLogin to tell them about your custom channel + * Register the mod for packets on this channel. * {@link FMLCommonHandler#registerChannel(cpw.mods.fml.common.ModContainer, String)} * * @param mod diff --git a/fml/common/cpw/mods/fml/common/FMLCommonHandler.java b/fml/common/cpw/mods/fml/common/FMLCommonHandler.java index f9ea042e7..1172332f2 100644 --- a/fml/common/cpw/mods/fml/common/FMLCommonHandler.java +++ b/fml/common/cpw/mods/fml/common/FMLCommonHandler.java @@ -322,8 +322,7 @@ public class FMLCommonHandler public MinecraftServer getMinecraftServerInstance() { - //TODO - return null; + return sidedDelegate.getServer(); } public void showGuiScreen(Object clientGuiElement) diff --git a/fml/common/cpw/mods/fml/common/IFMLSidedHandler.java b/fml/common/cpw/mods/fml/common/IFMLSidedHandler.java index a22dc39e2..83cc0f068 100644 --- a/fml/common/cpw/mods/fml/common/IFMLSidedHandler.java +++ b/fml/common/cpw/mods/fml/common/IFMLSidedHandler.java @@ -35,6 +35,8 @@ public interface IFMLSidedHandler void adjustEntityLocationOnClient(EntitySpawnAdjustmentPacket entitySpawnAdjustmentPacket); void beginServerLoading(MinecraftServer server); - + void finishServerLoading(); + + MinecraftServer getServer(); } diff --git a/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java b/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java index 00489ca28..a18b61ae8 100644 --- a/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java +++ b/fml/common/cpw/mods/fml/common/modloader/BaseModProxy.java @@ -14,21 +14,15 @@ package cpw.mods.fml.common.modloader; -import java.util.Map; import java.util.Random; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; import net.minecraft.src.ItemStack; +import net.minecraft.src.NetHandler; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.World; - -import cpw.mods.fml.common.IConsoleHandler; -import cpw.mods.fml.common.ICraftingHandler; -import cpw.mods.fml.common.IDispenseHandler; -import cpw.mods.fml.common.INetworkHandler; -import cpw.mods.fml.common.IPickupNotifier; -import cpw.mods.fml.common.IPlayerTracker; -import cpw.mods.fml.common.IWorldGenerator; import cpw.mods.fml.common.TickType; /** @@ -72,4 +66,18 @@ public interface BaseModProxy int addFuel(int itemId, int damage); void takenFromCrafting(EntityPlayer player, ItemStack item, IInventory craftMatrix); void takenFromFurnace(EntityPlayer player, ItemStack item); + + public abstract void onClientLogout(NetworkManager manager); + + public abstract void onClientLogin(EntityPlayer player); + + public abstract void onPacket250Received(EntityPlayer source, Packet250CustomPayload payload); + + public abstract void serverDisconnect(); + + public abstract void serverConnect(NetHandler handler); + + public abstract void receiveCustomPacket(Packet250CustomPayload packet); + + public abstract void receiveChatPacket(String text); } diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderConnectionHandler.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderConnectionHandler.java index 60161d1f6..33d68aa85 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModLoaderConnectionHandler.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderConnectionHandler.java @@ -1,6 +1,7 @@ package cpw.mods.fml.common.modloader; import net.minecraft.server.MinecraftServer; +import net.minecraft.src.EntityPlayer; import net.minecraft.src.NetHandler; import net.minecraft.src.NetLoginHandler; import net.minecraft.src.NetworkManager; @@ -10,11 +11,17 @@ import cpw.mods.fml.common.network.Player; public class ModLoaderConnectionHandler implements IConnectionHandler { + private BaseModProxy mod; + + public ModLoaderConnectionHandler(BaseModProxy mod) + { + this.mod = mod; + } @Override public void playerLoggedIn(Player player, NetHandler netHandler, NetworkManager manager) { - + mod.onClientLogin((EntityPlayer)player); } @Override @@ -26,29 +33,26 @@ public class ModLoaderConnectionHandler implements IConnectionHandler @Override public void connectionOpened(NetHandler netClientHandler, String server, int port, NetworkManager manager) { - // TODO Auto-generated method stub - + // noop } @Override public void connectionClosed(NetworkManager manager) { - // TODO Auto-generated method stub - + mod.serverDisconnect(); + mod.onClientLogout(manager); } @Override - public void clientLoggedIn(NetworkManager manager, Packet1Login login) + public void clientLoggedIn(NetHandler nh, NetworkManager manager, Packet1Login login) { - // TODO Auto-generated method stub - + mod.serverConnect(nh); } @Override public void connectionOpened(NetHandler netClientHandler, MinecraftServer server, NetworkManager manager) { - // TODO Auto-generated method stub - + // noop } } diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java index 1d9a07157..3a57899c7 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderHelper.java @@ -27,6 +27,7 @@ import cpw.mods.fml.common.IFuelHandler; import cpw.mods.fml.common.IWorldGenerator; import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.TickType; +import cpw.mods.fml.common.network.IConnectionHandler; import cpw.mods.fml.common.network.IPacketHandler; import cpw.mods.fml.relauncher.ReflectionHelper; @@ -97,11 +98,6 @@ public class ModLoaderHelper return mlmc; } - public static ModLoaderModContainer registerRenderHelper(BaseMod mod) { - ModLoaderModContainer mlmc=findOrBuildModContainer(mod); - return mlmc; - } - /** * @param mod * @return @@ -139,4 +135,9 @@ public class ModLoaderHelper sidedHelper.finishModLoading(mc); } } + + public static IConnectionHandler buildConnectionHelper(BaseModProxy mod) + { + return new ModLoaderConnectionHandler(mod); + } } diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java index 0c02b3803..9ef4506f1 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderModContainer.java @@ -67,6 +67,7 @@ import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.FMLNetworkHandler; import cpw.mods.fml.common.network.NetworkMod; +import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.TickRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.versioning.ArtifactVersion; @@ -521,6 +522,7 @@ public class ModLoaderModContainer implements ModContainer GameRegistry.registerWorldGenerator(ModLoaderHelper.buildWorldGenHelper(mod)); GameRegistry.registerFuelHandler(ModLoaderHelper.buildFuelHelper(mod)); GameRegistry.registerCraftingHandler(ModLoaderHelper.buildCraftingHelper(mod)); + NetworkRegistry.instance().registerConnectionHandler(ModLoaderHelper.buildConnectionHelper(mod)); } catch (Exception e) { diff --git a/fml/common/cpw/mods/fml/common/modloader/ModLoaderPacketHandler.java b/fml/common/cpw/mods/fml/common/modloader/ModLoaderPacketHandler.java index 1d64deec7..6b03a9750 100644 --- a/fml/common/cpw/mods/fml/common/modloader/ModLoaderPacketHandler.java +++ b/fml/common/cpw/mods/fml/common/modloader/ModLoaderPacketHandler.java @@ -2,6 +2,7 @@ package cpw.mods.fml.common.modloader; import net.minecraft.src.BaseMod; import net.minecraft.src.EntityPlayer; +import net.minecraft.src.EntityPlayerMP; import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet250CustomPayload; import cpw.mods.fml.common.network.IPacketHandler; @@ -19,7 +20,14 @@ public class ModLoaderPacketHandler implements IPacketHandler @Override public void onPacketData(NetworkManager manager, Packet250CustomPayload packet, Player player) { - mod.onPacket250Received((EntityPlayer) player, packet); + if (player instanceof EntityPlayerMP) + { + mod.onPacket250Received((EntityPlayer) player, packet); + } + else + { + mod.receiveCustomPacket(packet); + } } } diff --git a/fml/common/cpw/mods/fml/common/network/FMLNetworkHandler.java b/fml/common/cpw/mods/fml/common/network/FMLNetworkHandler.java index 3f533e2ff..f56c95db5 100644 --- a/fml/common/cpw/mods/fml/common/network/FMLNetworkHandler.java +++ b/fml/common/cpw/mods/fml/common/network/FMLNetworkHandler.java @@ -65,9 +65,9 @@ public class FMLNetworkHandler } } - public static void onConnectionEstablishedToServer(NetworkManager manager, Packet1Login login) + public static void onConnectionEstablishedToServer(NetHandler clientHandler, NetworkManager manager, Packet1Login login) { - NetworkRegistry.instance().clientLoggedIn(manager, login); + NetworkRegistry.instance().clientLoggedIn(clientHandler, manager, login); } private void handleFMLPacket(Packet250CustomPayload packet, NetworkManager network, NetHandler netHandler) diff --git a/fml/common/cpw/mods/fml/common/network/IConnectionHandler.java b/fml/common/cpw/mods/fml/common/network/IConnectionHandler.java index acecc8f66..64185d5be 100644 --- a/fml/common/cpw/mods/fml/common/network/IConnectionHandler.java +++ b/fml/common/cpw/mods/fml/common/network/IConnectionHandler.java @@ -14,7 +14,7 @@ public interface IConnectionHandler /** * Called when a player logs into the server * SERVER SIDE - * + * * @param player * @param netHandler * @param manager @@ -25,9 +25,9 @@ public interface IConnectionHandler * If you don't want the connection to continue, return a non-empty string here * If you do, you can do other stuff here- note no FML negotiation has occured yet * though the client is verified as having FML installed - * + * * SERVER SIDE - * + * * @param netHandler * @param manager * @return @@ -37,18 +37,18 @@ public interface IConnectionHandler /** * Fired when a remote connection is opened * CLIENT SIDE - * + * * @param netClientHandler * @param server * @param port */ void connectionOpened(NetHandler netClientHandler, String server, int port, NetworkManager manager); /** - * + * * Fired when a local connection is opened - * + * * CLIENT SIDE - * + * * @param netClientHandler * @param server */ @@ -56,21 +56,21 @@ public interface IConnectionHandler /** * Fired when a connection closes - * + * * ALL SIDES - * + * * @param manager */ void connectionClosed(NetworkManager manager); /** * Fired when the client established the connection to the server - * + * * CLIENT SIDE - * + * @param clientHandler * @param manager * @param login */ - void clientLoggedIn(NetworkManager manager, Packet1Login login); + void clientLoggedIn(NetHandler clientHandler, NetworkManager manager, Packet1Login login); } diff --git a/fml/common/cpw/mods/fml/common/network/NetworkRegistry.java b/fml/common/cpw/mods/fml/common/network/NetworkRegistry.java index 5dea661c1..1f0bf7e60 100644 --- a/fml/common/cpw/mods/fml/common/network/NetworkRegistry.java +++ b/fml/common/cpw/mods/fml/common/network/NetworkRegistry.java @@ -154,11 +154,11 @@ public class NetworkRegistry } } - void clientLoggedIn(NetworkManager manager, Packet1Login login) + void clientLoggedIn(NetHandler clientHandler, NetworkManager manager, Packet1Login login) { for (IConnectionHandler handler : connectionHandlers) { - handler.clientLoggedIn(manager, login); + handler.clientLoggedIn(clientHandler, manager, login); } } diff --git a/fml/common/cpw/mods/fml/common/registry/BlockTracker.java b/fml/common/cpw/mods/fml/common/registry/BlockTracker.java new file mode 100644 index 000000000..6075e83dc --- /dev/null +++ b/fml/common/cpw/mods/fml/common/registry/BlockTracker.java @@ -0,0 +1,49 @@ +package cpw.mods.fml.common.registry; + +import java.util.BitSet; + +import net.minecraft.src.Block; + +class BlockTracker +{ + private static final BlockTracker INSTANCE = new BlockTracker(); + private BitSet allocatedBlocks; + + private BlockTracker() + { + allocatedBlocks = new BitSet(4096); + allocatedBlocks.set(0, 4096); + for (int i = 0; i < Block.field_71973_m.length; i++) + { + if (Block.field_71973_m[i]!=null) + { + allocatedBlocks.clear(i); + } + } + } + public static int nextBlockId() + { + return instance().getNextBlockId(); + } + + private int getNextBlockId() + { + int idx = allocatedBlocks.nextSetBit(0); + allocatedBlocks.clear(idx); + return idx; + } + private static BlockTracker instance() + { + return INSTANCE; + } + public static void reserveBlockId(int id) + { + instance().doReserveId(id); + } + private void doReserveId(int id) + { + allocatedBlocks.clear(id); + } + + +} diff --git a/fml/common/cpw/mods/fml/common/registry/GameRegistry.java b/fml/common/cpw/mods/fml/common/registry/GameRegistry.java index c7c25bdc9..837f4a5c9 100644 --- a/fml/common/cpw/mods/fml/common/registry/GameRegistry.java +++ b/fml/common/cpw/mods/fml/common/registry/GameRegistry.java @@ -88,7 +88,7 @@ public class GameRegistry private static int findSpareBlockId() { - return 250; + return BlockTracker.nextBlockId(); } public static void registerBlock(net.minecraft.src.Block block) @@ -110,6 +110,7 @@ public class GameRegistry FMLLog.log(Level.SEVERE, e, "Caught an exception during block registration"); throw new LoaderException(e); } + BlockTracker.reserveBlockId(block.field_71990_ca); } public static void addRecipe(ItemStack output, Object... params) diff --git a/fml/common/cpw/mods/fml/common/registry/LanguageRegistry.java b/fml/common/cpw/mods/fml/common/registry/LanguageRegistry.java index 3ae66a857..76dbafd62 100644 --- a/fml/common/cpw/mods/fml/common/registry/LanguageRegistry.java +++ b/fml/common/cpw/mods/fml/common/registry/LanguageRegistry.java @@ -4,6 +4,9 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; +import net.minecraft.src.Block; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; import net.minecraft.src.StringTranslate; public class LanguageRegistry @@ -32,7 +35,18 @@ public class LanguageRegistry public void addNameForObject(Object objectToName, String lang, String name) { - + String objectName; + if (objectToName instanceof Item) { + objectName=((Item)objectToName).func_77658_a(); + } else if (objectToName instanceof Block) { + objectName=((Block)objectToName).func_71917_a(); + } else if (objectToName instanceof ItemStack) { + objectName=((ItemStack)objectToName).func_77973_b().func_77667_c((ItemStack)objectToName); + } else { + throw new IllegalArgumentException(String.format("Illegal object for naming %s",objectToName)); + } + objectName+=".name"; + addStringLocalization(lang, lang, name); } public void loadLanguageTable(Properties languagePack, String lang)