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)
|
||||
{
|
||||
for (ModContainer mc : Loader.instance().getActiveModList())
|
||||
{
|
||||
if (mc.matches(mod))
|
||||
{
|
||||
return mc;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return Loader.instance().getReversedModObjectList().get(mod);
|
||||
}
|
||||
/**
|
||||
* 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.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.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
|
@ -17,7 +20,9 @@ import com.google.common.eventbus.EventBus;
|
|||
import com.google.common.eventbus.Subscribe;
|
||||
|
||||
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.FMLPreInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLStateEvent;
|
||||
import cpw.mods.fml.common.network.FMLNetworkHandler;
|
||||
|
||||
|
@ -32,6 +37,7 @@ public class LoadController
|
|||
private Map<String, ModContainer> modList;
|
||||
private List<ModContainer> activeModList = Lists.newArrayList();
|
||||
private String activeContainer;
|
||||
private BiMap<ModContainer, Object> modObjectList;
|
||||
|
||||
public LoadController(Loader loader)
|
||||
{
|
||||
|
@ -103,6 +109,7 @@ public class LoadController
|
|||
{
|
||||
return activeContainer!=null ? modList.get(activeContainer) : null;
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
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)
|
||||
{
|
||||
errors.put(modContainer.getModId(), exception);
|
||||
|
@ -162,4 +179,9 @@ public class LoadController
|
|||
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.MapSplitter;
|
||||
import com.google.common.base.Throwables;
|
||||
import com.google.common.collect.BiMap;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Lists;
|
||||
|
@ -603,4 +604,14 @@ public class Loader
|
|||
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 cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.ModContainer;
|
||||
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)
|
||||
{
|
||||
if (player instanceof EntityPlayerMP)
|
||||
ModContainer mc = FMLCommonHandler.instance().findContainerFor(mod);
|
||||
if (mc == null)
|
||||
{
|
||||
NetworkRegistry.instance().openRemoteGui(FMLCommonHandler.instance().findContainerFor(mod), (EntityPlayerMP) player, modGuiId, world, x, y, z);
|
||||
NetworkModHandler nmh = instance().findNetworkModHandler(mod);
|
||||
if (nmh != null)
|
||||
{
|
||||
mc = nmh.getContainer();
|
||||
}
|
||||
else
|
||||
{
|
||||
NetworkRegistry.instance().openLocalGui(FMLCommonHandler.instance().findContainerFor(mod), (EntityPlayerMP) player, modGuiId, world, x, y, z);
|
||||
FMLLog.warning("A mod tried to open a gui on the server without being a NetworkMod");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (player instanceof EntityPlayerMP)
|
||||
{
|
||||
NetworkRegistry.instance().openRemoteGui(mc, (EntityPlayerMP) player, modGuiId, world, x, y, z);
|
||||
}
|
||||
else
|
||||
{
|
||||
NetworkRegistry.instance().openLocalGui(mc, player, modGuiId, world, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue