Support gui opening for Shelf mod

This commit is contained in:
Christian committed 2012-08-20 21:43:59 -04:00
1 parent dce1cbc096
commit 52483ee6bd
7 files changed
+110 -43

No files matched your search

@@ -22,6 +22,7 @@ import com.google.common.collect.Multimaps;
import cpw.mods.fml.client.registry.KeyBindingRegistry;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.modloader.BaseModProxy;
import cpw.mods.fml.common.modloader.IModLoaderSidedHelper;
import cpw.mods.fml.common.modloader.ModLoaderHelper;
import cpw.mods.fml.common.modloader.ModLoaderModContainer;
@@ -83,7 +84,7 @@ public class ModLoaderClientHelper implements IModLoaderSidedHelper
}
public static void registerKeyBinding(BaseMod mod, KeyBinding keyHandler, boolean allowRepeat)
public static void registerKeyBinding(BaseModProxy mod, KeyBinding keyHandler, boolean allowRepeat)
{
ModLoaderModContainer mlmc = (ModLoaderModContainer) Loader.instance().activeModContainer();
ModLoaderKeyBindingHandler handler = Iterables.getOnlyElement(keyBindingContainers.get(mlmc));
+17 -1
View File
@@ -223,7 +223,23 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr
public void generateSurface(World world, Random random, int chunkX, int chunkZ)
{
}
/**
* Callback to return a gui screen to display
* @param player
* @param containerID
* @param x
* @param y
* @param z
* @return
*/
@SideOnly(CLIENT)
@Override
public GuiScreen getContainerGUI(EntityPlayer player, int containerID, int x, int y, int z)
{
return null;
}
/**
* Return the name of your mod. Defaults to the class name
*
+14 -4
View File
@@ -35,6 +35,7 @@ import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ObfuscationReflectionHelper;
import cpw.mods.fml.common.asm.SideOnly;
import cpw.mods.fml.common.modloader.BaseModProxy;
import cpw.mods.fml.common.modloader.ModLoaderHelper;
import cpw.mods.fml.common.modloader.ModLoaderModContainer;
import cpw.mods.fml.common.network.NetworkRegistry;
@@ -572,6 +573,10 @@ public class ModLoader
GameRegistry.registerBlock(block, itemclass);
}
public static void registerContainerID(BaseModProxy mod, int id)
{
ModLoaderHelper.buildGuiHelper(mod, id);
}
/**
* Register a new entity ID
*
@@ -599,7 +604,7 @@ public class ModLoader
}
@SideOnly(CLIENT)
public static void registerKey(BaseMod mod, KeyBinding keyHandler, boolean allowRepeat)
public static void registerKey(BaseModProxy mod, KeyBinding keyHandler, boolean allowRepeat)
{
ModLoaderClientHelper.registerKeyBinding(mod, keyHandler, allowRepeat);
}
@@ -611,7 +616,7 @@ public class ModLoader
* @param mod
* @param channel
*/
public static void registerPacketChannel(BaseMod mod, String channel)
public static void registerPacketChannel(BaseModProxy mod, String channel)
{
NetworkRegistry.instance().registerChannel(ModLoaderHelper.buildPacketHandlerFor(mod), channel);
}
@@ -746,6 +751,11 @@ public class ModLoader
//TODO
}
public static void serverOpenWindow(EntityPlayer player, Container container, int ID, int x, int y, int z)
{
ModLoaderHelper.openGui(ID, player, container, x, y, z);
}
/**
* Indicate that you want to receive ticks
*
@@ -753,13 +763,13 @@ public class ModLoader
* @param enable indicates whether you want to recieve them or not
* @param useClock don't receive render subticks, just world ticks
*/
public static void setInGameHook(BaseMod mod, boolean enable, boolean useClock)
public static void setInGameHook(BaseModProxy mod, boolean enable, boolean useClock)
{
ModLoaderHelper.updateStandardTicks(mod, enable, useClock);
}
public static void setInGUIHook(BaseMod mod, boolean enable, boolean useClock)
public static void setInGUIHook(BaseModProxy mod, boolean enable, boolean useClock)
{
ModLoaderHelper.updateGUITicks(mod, enable, useClock);
}
@@ -17,13 +17,16 @@ package cpw.mods.fml.common.modloader;
import java.util.Random;
import net.minecraft.src.EntityPlayer;
import net.minecraft.src.GuiScreen;
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.Side;
import cpw.mods.fml.common.TickType;
import cpw.mods.fml.common.asm.SideOnly;
/**
*
@@ -82,4 +85,7 @@ public interface BaseModProxy
public abstract void receiveChatPacket(String text);
public abstract void onItemPickup(EntityPlayer player, ItemStack item);
@SideOnly(Side.CLIENT)
public abstract GuiScreen getContainerGUI(EntityPlayer player, int containerID, int x, int y, int z);
}
@@ -0,0 +1,43 @@
package cpw.mods.fml.common.modloader;
import net.minecraft.src.Container;
import net.minecraft.src.EntityPlayer;
import net.minecraft.src.World;
import cpw.mods.fml.common.network.IGuiHandler;
public class ModLoaderGuiHelper implements IGuiHandler
{
private BaseModProxy mod;
private int id;
private Container container;
ModLoaderGuiHelper(BaseModProxy mod, int id)
{
this.mod = mod;
this.id = id;
}
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
return container;
}
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
{
return mod.getContainerGUI(player, ID, x, y, z);
}
public void injectContainer(Container container)
{
this.container = container;
}
public Object getMod()
{
return mod;
}
}
@@ -18,7 +18,10 @@ import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.src.BaseMod;
import com.google.common.collect.Maps;
import net.minecraft.src.Container;
import net.minecraft.src.EntityPlayer;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.ICraftingHandler;
import cpw.mods.fml.common.IFuelHandler;
@@ -27,7 +30,9 @@ import cpw.mods.fml.common.IWorldGenerator;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.TickType;
import cpw.mods.fml.common.network.IConnectionHandler;
import cpw.mods.fml.common.network.IGuiHandler;
import cpw.mods.fml.common.network.IPacketHandler;
import cpw.mods.fml.common.network.NetworkRegistry;
/**
* @author cpw
@@ -35,10 +40,11 @@ import cpw.mods.fml.common.network.IPacketHandler;
*/
public class ModLoaderHelper
{
private static Map<BaseMod, ModLoaderModContainer> notModCallbacks=new HashMap<BaseMod, ModLoaderModContainer>();
public static IModLoaderSidedHelper sidedHelper;
public static void updateStandardTicks(BaseMod mod, boolean enable, boolean useClock)
private static Map<Integer, ModLoaderGuiHelper> guiHelpers = Maps.newHashMap();
public static void updateStandardTicks(BaseModProxy mod, boolean enable, boolean useClock)
{
ModLoaderModContainer mlmc = (ModLoaderModContainer) Loader.instance().activeModContainer();
BaseModTicker ticker = mlmc.getGameTickHandler();
@@ -59,9 +65,9 @@ public class ModLoaderHelper
}
}
public static void updateGUITicks(BaseMod mod, boolean enable, boolean useClock)
public static void updateGUITicks(BaseModProxy mod, boolean enable, boolean useClock)
{
ModLoaderModContainer mlmc = findOrBuildModContainer(mod);
ModLoaderModContainer mlmc = (ModLoaderModContainer) Loader.instance().activeModContainer();
EnumSet<TickType> ticks = mlmc.getGUITickHandler().ticks();
// If we're enabled and we don't want clock ticks we get render ticks
if (enable && !useClock) {
@@ -79,34 +85,7 @@ public class ModLoaderHelper
}
}
/**
* @param mod
* @return
*/
private static ModLoaderModContainer findOrBuildModContainer(BaseMod mod)
{
ModLoaderModContainer mlmc=(ModLoaderModContainer) FMLCommonHandler.instance().findContainerFor(mod);
if (mlmc==null) {
mlmc=notModCallbacks.get(mod);
if (mlmc==null) {
mlmc=new ModLoaderModContainer(mod);
notModCallbacks.put(mod, mlmc);
}
}
return mlmc;
}
/**
* @param mod
* @return
*/
public static ModLoaderModContainer registerKeyHelper(BaseMod mod)
{
ModLoaderModContainer mlmc=findOrBuildModContainer(mod);
return mlmc;
}
public static IPacketHandler buildPacketHandlerFor(BaseMod mod)
public static IPacketHandler buildPacketHandlerFor(BaseModProxy mod)
{
return new ModLoaderPacketHandler(mod);
}
@@ -143,4 +122,17 @@ public class ModLoaderHelper
{
return new ModLoaderPickupNotifier(mod);
}
public static void buildGuiHelper(BaseModProxy mod, int id)
{
ModLoaderGuiHelper handler = new ModLoaderGuiHelper(mod, id);
guiHelpers.put(id, handler);
NetworkRegistry.instance().registerGuiHandler(Loader.instance().activeModContainer(), handler);
}
public static void openGui(int id, EntityPlayer player, Container container, int x, int y, int z)
{
guiHelpers.get(id).injectContainer(container);
player.openGui(guiHelpers.get(id).getMod(), id, player.field_70170_p, x, y, z);
}
}
@@ -1,6 +1,5 @@
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;
@@ -10,9 +9,9 @@ import cpw.mods.fml.common.network.Player;
public class ModLoaderPacketHandler implements IPacketHandler
{
private BaseMod mod;
private BaseModProxy mod;
public ModLoaderPacketHandler(BaseMod mod)
public ModLoaderPacketHandler(BaseModProxy mod)
{
this.mod = mod;
}