Lost of work to try and complete ML support - probably still bits missing, but mostly there

This commit is contained in:
Christian 2012-08-11 11:01:18 -04:00
parent 185f8ddbc7
commit 92b7ed1182
16 changed files with 150 additions and 51 deletions

View File

@ -396,4 +396,10 @@ public class FMLClientHandler implements IFMLSidedHandler
{
// NOOP
}
@Override
public MinecraftServer getServer()
{
return client.func_71401_C();
}
}

View File

@ -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)
{
}

View File

@ -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

View File

@ -322,8 +322,7 @@ public class FMLCommonHandler
public MinecraftServer getMinecraftServerInstance()
{
//TODO
return null;
return sidedDelegate.getServer();
}
public void showGuiScreen(Object clientGuiElement)

View File

@ -35,6 +35,8 @@ public interface IFMLSidedHandler
void adjustEntityLocationOnClient(EntitySpawnAdjustmentPacket entitySpawnAdjustmentPacket);
void beginServerLoading(MinecraftServer server);
void finishServerLoading();
MinecraftServer getServer();
}

View File

@ -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);
}

View File

@ -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
}
}

View File

@ -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);
}
}

View File

@ -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)
{

View File

@ -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);
}
}
}

View File

@ -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)

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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)

View File

@ -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)