Fix up some network related stuff and optimize mod lookup a bit
This commit is contained in:
parent
2e66429b03
commit
7e35f13f30
|
@ -155,14 +155,7 @@ public class FMLCommonHandler
|
||||||
*/
|
*/
|
||||||
public ModContainer findContainerFor(Object mod)
|
public ModContainer findContainerFor(Object mod)
|
||||||
{
|
{
|
||||||
for (ModContainer mc : Loader.instance().getActiveModList())
|
return Loader.instance().getReversedModObjectList().get(mod);
|
||||||
{
|
|
||||||
if (mc.matches(mod))
|
|
||||||
{
|
|
||||||
return mc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Get the forge mod loader logging instance (goes to the forgemodloader log file)
|
* Get the forge mod loader logging instance (goes to the forgemodloader log file)
|
||||||
|
|
|
@ -7,6 +7,9 @@ import java.util.logging.Level;
|
||||||
|
|
||||||
import com.google.common.base.Joiner;
|
import com.google.common.base.Joiner;
|
||||||
import com.google.common.collect.ArrayListMultimap;
|
import com.google.common.collect.ArrayListMultimap;
|
||||||
|
import com.google.common.collect.BiMap;
|
||||||
|
import com.google.common.collect.HashBiMap;
|
||||||
|
import com.google.common.collect.ImmutableBiMap;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
@ -17,7 +20,9 @@ import com.google.common.eventbus.EventBus;
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
|
|
||||||
import cpw.mods.fml.common.LoaderState.ModState;
|
import cpw.mods.fml.common.LoaderState.ModState;
|
||||||
|
import cpw.mods.fml.common.event.FMLConstructionEvent;
|
||||||
import cpw.mods.fml.common.event.FMLLoadEvent;
|
import cpw.mods.fml.common.event.FMLLoadEvent;
|
||||||
|
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||||
import cpw.mods.fml.common.event.FMLStateEvent;
|
import cpw.mods.fml.common.event.FMLStateEvent;
|
||||||
import cpw.mods.fml.common.network.FMLNetworkHandler;
|
import cpw.mods.fml.common.network.FMLNetworkHandler;
|
||||||
|
|
||||||
|
@ -32,6 +37,7 @@ public class LoadController
|
||||||
private Map<String, ModContainer> modList;
|
private Map<String, ModContainer> modList;
|
||||||
private List<ModContainer> activeModList = Lists.newArrayList();
|
private List<ModContainer> activeModList = Lists.newArrayList();
|
||||||
private String activeContainer;
|
private String activeContainer;
|
||||||
|
private BiMap<ModContainer, Object> modObjectList;
|
||||||
|
|
||||||
public LoadController(Loader loader)
|
public LoadController(Loader loader)
|
||||||
{
|
{
|
||||||
|
@ -103,6 +109,7 @@ public class LoadController
|
||||||
{
|
{
|
||||||
return activeContainer!=null ? modList.get(activeContainer) : null;
|
return activeContainer!=null ? modList.get(activeContainer) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void propogateStateMessage(FMLStateEvent stateEvent)
|
public void propogateStateMessage(FMLStateEvent stateEvent)
|
||||||
{
|
{
|
||||||
|
@ -125,6 +132,16 @@ public class LoadController
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void buildModObjectList(FMLConstructionEvent pre)
|
||||||
|
{
|
||||||
|
com.google.common.collect.ImmutableBiMap.Builder<ModContainer, Object> builder = ImmutableBiMap.<ModContainer, Object>builder();
|
||||||
|
for (ModContainer mc : activeModList)
|
||||||
|
{
|
||||||
|
builder.put(mc, mc.getMod());
|
||||||
|
}
|
||||||
|
modObjectList = builder.build();
|
||||||
|
}
|
||||||
public void errorOccurred(ModContainer modContainer, Throwable exception)
|
public void errorOccurred(ModContainer modContainer, Throwable exception)
|
||||||
{
|
{
|
||||||
errors.put(modContainer.getModId(), exception);
|
errors.put(modContainer.getModId(), exception);
|
||||||
|
@ -162,4 +179,9 @@ public class LoadController
|
||||||
throw new LoaderException(e);
|
throw new LoaderException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BiMap<ModContainer, Object> getModObjectList()
|
||||||
|
{
|
||||||
|
return ImmutableBiMap.copyOf(modObjectList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ import com.google.common.base.Joiner;
|
||||||
import com.google.common.base.Splitter;
|
import com.google.common.base.Splitter;
|
||||||
import com.google.common.base.Splitter.MapSplitter;
|
import com.google.common.base.Splitter.MapSplitter;
|
||||||
import com.google.common.base.Throwables;
|
import com.google.common.base.Throwables;
|
||||||
|
import com.google.common.collect.BiMap;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
@ -603,4 +604,14 @@ public class Loader
|
||||||
modController.transition(LoaderState.AVAILABLE);
|
modController.transition(LoaderState.AVAILABLE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BiMap<ModContainer, Object> getModObjectList()
|
||||||
|
{
|
||||||
|
return modController.getModObjectList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public BiMap<Object, ModContainer> getReversedModObjectList()
|
||||||
|
{
|
||||||
|
return getModObjectList().inverse();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ import com.google.common.collect.Maps;
|
||||||
import com.google.common.hash.Hashing;
|
import com.google.common.hash.Hashing;
|
||||||
|
|
||||||
import cpw.mods.fml.common.FMLCommonHandler;
|
import cpw.mods.fml.common.FMLCommonHandler;
|
||||||
|
import cpw.mods.fml.common.FMLLog;
|
||||||
import cpw.mods.fml.common.Loader;
|
import cpw.mods.fml.common.Loader;
|
||||||
import cpw.mods.fml.common.ModContainer;
|
import cpw.mods.fml.common.ModContainer;
|
||||||
import cpw.mods.fml.common.discovery.ASMDataTable;
|
import cpw.mods.fml.common.discovery.ASMDataTable;
|
||||||
|
@ -284,13 +285,27 @@ public class FMLNetworkHandler
|
||||||
|
|
||||||
public static void openGui(EntityPlayer player, Object mod, int modGuiId, World world, int x, int y, int z)
|
public static void openGui(EntityPlayer player, Object mod, int modGuiId, World world, int x, int y, int z)
|
||||||
{
|
{
|
||||||
|
ModContainer mc = FMLCommonHandler.instance().findContainerFor(mod);
|
||||||
|
if (mc == null)
|
||||||
|
{
|
||||||
|
NetworkModHandler nmh = instance().findNetworkModHandler(mod);
|
||||||
|
if (nmh != null)
|
||||||
|
{
|
||||||
|
mc = nmh.getContainer();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FMLLog.warning("A mod tried to open a gui on the server without being a NetworkMod");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (player instanceof EntityPlayerMP)
|
if (player instanceof EntityPlayerMP)
|
||||||
{
|
{
|
||||||
NetworkRegistry.instance().openRemoteGui(FMLCommonHandler.instance().findContainerFor(mod), (EntityPlayerMP) player, modGuiId, world, x, y, z);
|
NetworkRegistry.instance().openRemoteGui(mc, (EntityPlayerMP) player, modGuiId, world, x, y, z);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
NetworkRegistry.instance().openLocalGui(FMLCommonHandler.instance().findContainerFor(mod), (EntityPlayerMP) player, modGuiId, world, x, y, z);
|
NetworkRegistry.instance().openLocalGui(mc, player, modGuiId, world, x, y, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue