More stuff as I roll out the changes
This commit is contained in:
parent
9e4131c3e8
commit
769663466f
|
@ -43,6 +43,7 @@ import javax.imageio.ImageIO;
|
||||||
|
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
import com.google.common.base.Throwables;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@ -173,6 +174,12 @@ public class FMLClientHandler implements IFMLSidedHandler
|
||||||
|
|
||||||
public void onPreLoad(Minecraft minecraft)
|
public void onPreLoad(Minecraft minecraft)
|
||||||
{
|
{
|
||||||
|
if (minecraft.func_55063_q())
|
||||||
|
{
|
||||||
|
FMLLog.severe("DEMO MODE DETECTED, FML will not work. Finishing now.");
|
||||||
|
haltGame("FML will not run in demo mode", new RuntimeException());
|
||||||
|
return;
|
||||||
|
}
|
||||||
client = minecraft;
|
client = minecraft;
|
||||||
ObfuscationReflectionHelper.detectObfuscation(World.class);
|
ObfuscationReflectionHelper.detectObfuscation(World.class);
|
||||||
FMLCommonHandler.instance().beginLoading(this);
|
FMLCommonHandler.instance().beginLoading(this);
|
||||||
|
@ -205,6 +212,7 @@ public class FMLClientHandler implements IFMLSidedHandler
|
||||||
public void haltGame(String message, Throwable t)
|
public void haltGame(String message, Throwable t)
|
||||||
{
|
{
|
||||||
client.func_55071_b(new CrashReport(message, t));
|
client.func_55071_b(new CrashReport(message, t));
|
||||||
|
throw Throwables.propagate(t);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Called a bit later on during initialization to finish loading mods
|
* Called a bit later on during initialization to finish loading mods
|
||||||
|
@ -740,7 +748,7 @@ public class FMLClientHandler implements IFMLSidedHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerTextureOverrides(RenderEngine renderer) {
|
public void registerTextureOverrides(RenderEngine renderer) {
|
||||||
for (ModContainer mod : Loader.getModList()) {
|
for (ModContainer mod : Loader.instance().getActiveModList()) {
|
||||||
registerAnimatedTexturesFor(mod);
|
registerAnimatedTexturesFor(mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class GuiModList extends GuiScreen
|
||||||
this.mainMenu=mainMenu;
|
this.mainMenu=mainMenu;
|
||||||
this.mods=new ArrayList<ModContainer>();
|
this.mods=new ArrayList<ModContainer>();
|
||||||
FMLClientHandler.instance().addSpecialModEntries(mods);
|
FMLClientHandler.instance().addSpecialModEntries(mods);
|
||||||
for (ModContainer mod : Loader.getModList()) {
|
for (ModContainer mod : Loader.instance().getModList()) {
|
||||||
if (mod.getMetadata()!=null && mod.getMetadata().parentMod != null) {
|
if (mod.getMetadata()!=null && mod.getMetadata().parentMod != null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -123,6 +123,7 @@ public class GuiModList extends GuiScreen
|
||||||
shifty += 12;
|
shifty += 12;
|
||||||
|
|
||||||
shifty = drawLine(String.format("Version: %s (%s)", selectedMod.getMetadata().version, selectedMod.getVersion()), offset, shifty);
|
shifty = drawLine(String.format("Version: %s (%s)", selectedMod.getMetadata().version, selectedMod.getVersion()), offset, shifty);
|
||||||
|
shifty = drawLine(String.format("Mod State: %s", Loader.instance().getModState(selectedMod)), offset, shifty);
|
||||||
if (!selectedMod.getMetadata().credits.isEmpty()) {
|
if (!selectedMod.getMetadata().credits.isEmpty()) {
|
||||||
shifty = drawLine(String.format("Credits: %s", selectedMod.getMetadata().credits), offset, shifty);
|
shifty = drawLine(String.format("Credits: %s", selectedMod.getMetadata().credits), offset, shifty);
|
||||||
}
|
}
|
||||||
|
@ -134,8 +135,9 @@ public class GuiModList extends GuiScreen
|
||||||
offset = ( this.listWidth + this.field_951_c ) / 2;
|
offset = ( this.listWidth + this.field_951_c ) / 2;
|
||||||
this.func_548_a(this.field_6451_g, selectedMod.getName(), offset, 35, 0xFFFFFF);
|
this.func_548_a(this.field_6451_g, selectedMod.getName(), offset, 35, 0xFFFFFF);
|
||||||
this.func_548_a(this.field_6451_g, String.format("Version: %s",selectedMod.getVersion()), offset, 45, 0xFFFFFF);
|
this.func_548_a(this.field_6451_g, String.format("Version: %s",selectedMod.getVersion()), offset, 45, 0xFFFFFF);
|
||||||
this.func_548_a(this.field_6451_g, "No mod information found", offset, 55, 0xDDDDDD);
|
this.func_548_a(this.field_6451_g, String.format("Mod State: %s",Loader.instance().getModState(selectedMod)), offset, 55, 0xFFFFFF);
|
||||||
this.func_548_a(this.field_6451_g, "Ask your mod author to provide a mod .info file", offset, 65, 0xDDDDDD);
|
this.func_548_a(this.field_6451_g, "No mod information found", offset, 65, 0xDDDDDD);
|
||||||
|
this.func_548_a(this.field_6451_g, "Ask your mod author to provide a mod mcmod.info file", offset, 75, 0xDDDDDD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.func_571_a(p_571_1_, p_571_2_, p_571_3_);
|
super.func_571_a(p_571_1_, p_571_2_, p_571_3_);
|
||||||
|
|
|
@ -17,6 +17,7 @@ package cpw.mods.fml.client;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import cpw.mods.fml.common.Loader;
|
import cpw.mods.fml.common.Loader;
|
||||||
|
import cpw.mods.fml.common.LoaderState.ModState;
|
||||||
import cpw.mods.fml.common.ModContainer;
|
import cpw.mods.fml.common.ModContainer;
|
||||||
import cpw.mods.fml.common.ModMetadata;
|
import cpw.mods.fml.common.ModMetadata;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@ -75,9 +76,18 @@ public class GuiSlotModList extends GuiScrollingList
|
||||||
protected void drawSlot(int listIndex, int var2, int var3, int var4, Tessellator var5)
|
protected void drawSlot(int listIndex, int var2, int var3, int var4, Tessellator var5)
|
||||||
{
|
{
|
||||||
ModContainer mc=mods.get(listIndex);
|
ModContainer mc=mods.get(listIndex);
|
||||||
this.parent.getFontRenderer().func_873_b(this.parent.getFontRenderer().func_50107_a(mc.getName(), listWidth - 11), this.left + 3 , var3 + 2, 0xFFFFFF);
|
if (Loader.instance().getModState(mc)==ModState.DISABLED)
|
||||||
this.parent.getFontRenderer().func_873_b(this.parent.getFontRenderer().func_50107_a(mc.getVersion(), listWidth - 11), this.left + 3 , var3 + 12, 0xCCCCCC);
|
{
|
||||||
this.parent.getFontRenderer().func_873_b(this.parent.getFontRenderer().func_50107_a(mc.getMetadata() !=null ? mc.getMetadata().getChildModCountString() : "Metadata not found", listWidth - 9), this.left + 3 , var3 + 22, 0xCCCCCC);
|
this.parent.getFontRenderer().func_873_b(this.parent.getFontRenderer().func_50107_a(mc.getName(), listWidth - 11), this.left + 3 , var3 + 2, 0xFF2222);
|
||||||
|
this.parent.getFontRenderer().func_873_b(this.parent.getFontRenderer().func_50107_a(mc.getVersion(), listWidth - 11), this.left + 3 , var3 + 12, 0xFF2222);
|
||||||
|
this.parent.getFontRenderer().func_873_b(this.parent.getFontRenderer().func_50107_a("DISABLED", listWidth - 11), this.left + 3 , var3 + 22, 0xFF2222);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.parent.getFontRenderer().func_873_b(this.parent.getFontRenderer().func_50107_a(mc.getName(), listWidth - 11), this.left + 3 , var3 + 2, 0xFFFFFF);
|
||||||
|
this.parent.getFontRenderer().func_873_b(this.parent.getFontRenderer().func_50107_a(mc.getVersion(), listWidth - 11), this.left + 3 , var3 + 12, 0xCCCCCC);
|
||||||
|
this.parent.getFontRenderer().func_873_b(this.parent.getFontRenderer().func_50107_a(mc.getMetadata() !=null ? mc.getMetadata().getChildModCountString() : "Metadata not found", listWidth - 9), this.left + 3 , var3 + 22, 0xCCCCCC);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,9 +38,16 @@ import java.util.zip.ZipException;
|
||||||
import java.util.zip.ZipFile;
|
import java.util.zip.ZipFile;
|
||||||
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipInputStream;
|
||||||
|
|
||||||
|
import net.minecraft.src.CallableMinecraftVersion;
|
||||||
|
|
||||||
|
import com.google.common.base.Strings;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import com.google.common.collect.ImmutableList.Builder;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import cpw.mods.fml.common.discovery.ContainerType;
|
import cpw.mods.fml.common.discovery.ContainerType;
|
||||||
import cpw.mods.fml.common.registry.TickRegistry;
|
import cpw.mods.fml.common.registry.TickRegistry;
|
||||||
import cpw.mods.fml.common.registry.WorldRegistry;
|
import cpw.mods.fml.common.registry.GameRegistry;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -158,7 +165,7 @@ public class FMLCommonHandler
|
||||||
*/
|
*/
|
||||||
public ModContainer findContainerFor(Object mod)
|
public ModContainer findContainerFor(Object mod)
|
||||||
{
|
{
|
||||||
for (ModContainer mc : Loader.getModList())
|
for (ModContainer mc : Loader.instance().getActiveModList())
|
||||||
{
|
{
|
||||||
if (mc.matches(mod))
|
if (mc.matches(mod))
|
||||||
{
|
{
|
||||||
|
@ -405,6 +412,7 @@ public class FMLCommonHandler
|
||||||
|
|
||||||
private Class<?> forge;
|
private Class<?> forge;
|
||||||
private boolean noForge;
|
private boolean noForge;
|
||||||
|
private List<String> brandings;
|
||||||
|
|
||||||
private Class<?> findMinecraftForge()
|
private Class<?> findMinecraftForge()
|
||||||
{
|
{
|
||||||
|
@ -442,27 +450,35 @@ public class FMLCommonHandler
|
||||||
* @param string
|
* @param string
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public String[] getBrandingStrings(String mcVersion)
|
public void computeBranding()
|
||||||
{
|
{
|
||||||
ArrayList<String> brandings=new ArrayList<String>();
|
if (brandings == null)
|
||||||
brandings.add(mcVersion);
|
|
||||||
brandings.add(Loader.instance().getFMLVersionString());
|
|
||||||
String forgeVersion = (String)callForgeMethod("getVersionString");
|
|
||||||
if (forgeVersion != null)
|
|
||||||
{
|
{
|
||||||
brandings.add(forgeVersion);
|
Builder brd = ImmutableList.<String>builder();
|
||||||
|
brd.add("Minecraft "+CallableMinecraftVersion.func_55337_a());
|
||||||
|
brd.add(Loader.instance().getFMLVersionString());
|
||||||
|
brd.add(Strings.nullToEmpty((String)callForgeMethod("getVersionString")));
|
||||||
|
brd.addAll(sidedDelegate.getAdditionalBrandingInformation());
|
||||||
|
try {
|
||||||
|
Properties props=new Properties();
|
||||||
|
props.load(getClass().getClassLoader().getResourceAsStream("fmlbranding.properties"));
|
||||||
|
brd.add(props.getProperty("fmlbranding"));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
// Ignore - no branding file found
|
||||||
|
}
|
||||||
|
int tModCount = Loader.instance().getModList().size();
|
||||||
|
int aModCount = Loader.instance().getActiveModList().size();
|
||||||
|
brd.add(String.format("%d mod%s loaded, %d mod%s active", tModCount, tModCount!=1 ? "s" :"", aModCount, aModCount!=1 ? "s" :"" ));
|
||||||
|
brandings = brd.build();
|
||||||
}
|
}
|
||||||
brandings.addAll(sidedDelegate.getAdditionalBrandingInformation());
|
}
|
||||||
try {
|
public List<String> getBrandings()
|
||||||
Properties props=new Properties();
|
{
|
||||||
props.load(FMLCommonHandler.class.getClassLoader().getResourceAsStream("fmlbranding.properties"));
|
if (brandings == null)
|
||||||
brandings.add(props.getProperty("fmlbranding"));
|
{
|
||||||
} catch (Exception ex) {
|
computeBranding();
|
||||||
// Ignore - no branding file found
|
|
||||||
}
|
}
|
||||||
brandings.add(String.format("%d mod%s loaded",Loader.getModList().size(), Loader.getModList().size()!=1?"s":""));
|
return ImmutableList.copyOf(brandings);
|
||||||
Collections.reverse(brandings);
|
|
||||||
return brandings.toArray(new String[brandings.size()]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -487,7 +503,7 @@ public class FMLCommonHandler
|
||||||
|
|
||||||
public void handleWorldGeneration(int chunkX, int chunkZ, long worldSeed, Object... data)
|
public void handleWorldGeneration(int chunkX, int chunkZ, long worldSeed, Object... data)
|
||||||
{
|
{
|
||||||
WorldRegistry.generateWorld(chunkX, chunkZ, worldSeed, data);
|
GameRegistry.generateWorld(chunkX, chunkZ, worldSeed, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onPostServerTick()
|
public void onPostServerTick()
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package cpw.mods.fml.common;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.LoaderState.ModState;
|
||||||
|
import cpw.mods.fml.common.event.FMLStateEvent;
|
||||||
|
|
||||||
|
public class FMLLoadCompleteEvent extends FMLStateEvent
|
||||||
|
{
|
||||||
|
|
||||||
|
public FMLLoadCompleteEvent(Object... data)
|
||||||
|
{
|
||||||
|
super(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ModState getModState()
|
||||||
|
{
|
||||||
|
return ModState.AVAILABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -36,6 +36,8 @@ import cpw.mods.fml.common.event.FMLConstructionEvent;
|
||||||
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||||
|
import cpw.mods.fml.common.registry.FMLRegistry;
|
||||||
|
import cpw.mods.fml.common.registry.GameRegistry;
|
||||||
|
|
||||||
public class FMLModContainer implements ModContainer
|
public class FMLModContainer implements ModContainer
|
||||||
{
|
{
|
||||||
|
@ -229,6 +231,7 @@ public class FMLModContainer implements ModContainer
|
||||||
for (Object o : annotations.get(Block.class))
|
for (Object o : annotations.get(Block.class))
|
||||||
{
|
{
|
||||||
Field f = (Field) o;
|
Field f = (Field) o;
|
||||||
|
f.set(modInstance, GameRegistry.buildBlock(this, f.getType(), f.getAnnotation(Block.class)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package cpw.mods.fml.common;
|
package cpw.mods.fml.common;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
@ -7,7 +8,10 @@ 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.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.ImmutableMap.Builder;
|
import com.google.common.collect.ImmutableMap.Builder;
|
||||||
|
import com.google.common.collect.Iterators;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
|
@ -24,6 +28,8 @@ public class LoadController
|
||||||
private Multimap<String, ModState> modStates = ArrayListMultimap.create();
|
private Multimap<String, ModState> modStates = ArrayListMultimap.create();
|
||||||
private Multimap<String, Throwable> errors = ArrayListMultimap.create();
|
private Multimap<String, Throwable> errors = ArrayListMultimap.create();
|
||||||
private Map<String, ModContainer> modList;
|
private Map<String, ModContainer> modList;
|
||||||
|
private List<ModContainer> activeModList = Lists.newArrayList();
|
||||||
|
private String activeContainer;
|
||||||
|
|
||||||
public LoadController(Loader loader)
|
public LoadController(Loader loader)
|
||||||
{
|
{
|
||||||
|
@ -34,13 +40,14 @@ public class LoadController
|
||||||
|
|
||||||
Builder<String, EventBus> eventBus = ImmutableMap.builder();
|
Builder<String, EventBus> eventBus = ImmutableMap.builder();
|
||||||
|
|
||||||
for (ModContainer mod : Loader.getModList())
|
for (ModContainer mod : loader.getModList())
|
||||||
{
|
{
|
||||||
EventBus bus = new EventBus(mod.getModId());
|
EventBus bus = new EventBus(mod.getModId());
|
||||||
boolean isActive = mod.registerBus(bus, this);
|
boolean isActive = mod.registerBus(bus, this);
|
||||||
if (isActive)
|
if (isActive)
|
||||||
{
|
{
|
||||||
FMLLog.fine("Activating mod %s", mod.getModId());
|
FMLLog.fine("Activating mod %s", mod.getModId());
|
||||||
|
activeModList.add(mod);
|
||||||
modStates.put(mod.getModId(), ModState.UNLOADED);
|
modStates.put(mod.getModId(), ModState.UNLOADED);
|
||||||
eventBus.put(mod.getModId(), bus);
|
eventBus.put(mod.getModId(), bus);
|
||||||
}
|
}
|
||||||
|
@ -59,6 +66,11 @@ public class LoadController
|
||||||
|
|
||||||
public void distributeStateMessage(Object... eventData)
|
public void distributeStateMessage(Object... eventData)
|
||||||
{
|
{
|
||||||
|
if (state==LoaderState.ERRORED)
|
||||||
|
{
|
||||||
|
throw new LoaderException();
|
||||||
|
}
|
||||||
|
|
||||||
if (state.hasEvent())
|
if (state.hasEvent())
|
||||||
{
|
{
|
||||||
masterChannel.post(state.getEvent(eventData));
|
masterChannel.post(state.getEvent(eventData));
|
||||||
|
@ -81,16 +93,23 @@ public class LoadController
|
||||||
FMLLog.log(Level.SEVERE, error.getValue(), "Caught exception from %s", error.getKey());
|
FMLLog.log(Level.SEVERE, error.getValue(), "Caught exception from %s", error.getKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new LoaderException();
|
// Throw embedding the first error (usually the only one)
|
||||||
|
throw new LoaderException(errors.values().iterator().next());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ModContainer activeContainer()
|
||||||
|
{
|
||||||
|
return activeContainer!=null ? modList.get(activeContainer) : null;
|
||||||
|
}
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void propogateStateMessage(FMLStateEvent stateEvent)
|
public void propogateStateMessage(FMLStateEvent stateEvent)
|
||||||
{
|
{
|
||||||
for (Map.Entry<String,EventBus> entry : eventChannels.entrySet())
|
for (Map.Entry<String,EventBus> entry : eventChannels.entrySet())
|
||||||
{
|
{
|
||||||
|
activeContainer = entry.getKey();
|
||||||
entry.getValue().post(stateEvent);
|
entry.getValue().post(stateEvent);
|
||||||
|
activeContainer = null;
|
||||||
if (!errors.containsKey(entry.getKey()))
|
if (!errors.containsKey(entry.getKey()))
|
||||||
{
|
{
|
||||||
modStates.put(entry.getKey(), stateEvent.getModState());
|
modStates.put(entry.getKey(), stateEvent.getModState());
|
||||||
|
@ -116,4 +135,14 @@ public class LoadController
|
||||||
Joiner.on("->"). appendTo(ret, modStates.get(modId));
|
Joiner.on("->"). appendTo(ret, modStates.get(modId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<ModContainer> getActiveModList()
|
||||||
|
{
|
||||||
|
return activeModList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModState getModState(ModContainer selectedMod)
|
||||||
|
{
|
||||||
|
return Iterables.getLast(modStates.get(selectedMod.getModId()), ModState.AVAILABLE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,9 +23,11 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Hashtable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
|
@ -40,6 +42,7 @@ import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.LoaderState.ModState;
|
||||||
import cpw.mods.fml.common.discovery.ContainerType;
|
import cpw.mods.fml.common.discovery.ContainerType;
|
||||||
import cpw.mods.fml.common.discovery.ModDiscoverer;
|
import cpw.mods.fml.common.discovery.ModDiscoverer;
|
||||||
import cpw.mods.fml.common.functions.ModIdFunction;
|
import cpw.mods.fml.common.functions.ModIdFunction;
|
||||||
|
@ -320,7 +323,7 @@ public class Loader
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<ModContainer> getModList()
|
public List<ModContainer> getModList()
|
||||||
{
|
{
|
||||||
return ImmutableList.copyOf(instance().mods);
|
return ImmutableList.copyOf(instance().mods);
|
||||||
}
|
}
|
||||||
|
@ -417,7 +420,9 @@ public class Loader
|
||||||
public String getCrashInformation()
|
public String getCrashInformation()
|
||||||
{
|
{
|
||||||
StringBuilder ret = new StringBuilder();
|
StringBuilder ret = new StringBuilder();
|
||||||
Joiner.on('\n').appendTo(ret, FMLCommonHandler.instance().getBrandingStrings(""));
|
List<String> branding = FMLCommonHandler.instance().getBrandings();
|
||||||
|
|
||||||
|
Joiner.on(' ').skipNulls().appendTo(ret, branding.subList(1, branding.size()));
|
||||||
if (modController!=null)
|
if (modController!=null)
|
||||||
{
|
{
|
||||||
modController.printModStates(ret);
|
modController.printModStates(ret);
|
||||||
|
@ -513,6 +518,28 @@ public class Loader
|
||||||
modController.transition(LoaderState.POSTINITIALIZATION);
|
modController.transition(LoaderState.POSTINITIALIZATION);
|
||||||
modController.distributeStateMessage();
|
modController.distributeStateMessage();
|
||||||
modController.transition(LoaderState.LOADCOMPLETE);
|
modController.transition(LoaderState.LOADCOMPLETE);
|
||||||
|
modController.distributeStateMessage();
|
||||||
FMLLog.info("Forge Mod Loader has successfully loaded %d mod%s", mods.size(), mods.size()==1 ? "" : "s");
|
FMLLog.info("Forge Mod Loader has successfully loaded %d mod%s", mods.size(), mods.size()==1 ? "" : "s");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Callable getCallableCrashInformation()
|
||||||
|
{
|
||||||
|
return new Callable<String>() {
|
||||||
|
@Override
|
||||||
|
public String call() throws Exception
|
||||||
|
{
|
||||||
|
return getCrashInformation();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ModContainer> getActiveModList()
|
||||||
|
{
|
||||||
|
return modController.getActiveModList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ModState getModState(ModContainer selectedMod)
|
||||||
|
{
|
||||||
|
return modController.getModState(selectedMod);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ public enum LoaderState
|
||||||
PREINITIALIZATION("Pre-initializing mods", FMLPreInitializationEvent.class),
|
PREINITIALIZATION("Pre-initializing mods", FMLPreInitializationEvent.class),
|
||||||
INITIALIZATION("Initializing mods", FMLInitializationEvent.class),
|
INITIALIZATION("Initializing mods", FMLInitializationEvent.class),
|
||||||
POSTINITIALIZATION("Post-initializing mods", FMLPostInitializationEvent.class),
|
POSTINITIALIZATION("Post-initializing mods", FMLPostInitializationEvent.class),
|
||||||
LOADCOMPLETE("Mod loading complete", null),
|
LOADCOMPLETE("Mod loading complete", FMLLoadCompleteEvent.class),
|
||||||
ERRORED("Mod Loading errored",null);
|
ERRORED("Mod Loading errored",null);
|
||||||
|
|
||||||
private Class<? extends FMLStateEvent> eventClass;
|
private Class<? extends FMLStateEvent> eventClass;
|
||||||
|
|
|
@ -18,6 +18,8 @@ import java.util.List;
|
||||||
|
|
||||||
import com.google.common.eventbus.EventBus;
|
import com.google.common.eventbus.EventBus;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.LoaderState.ModState;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The container that wraps around mods in the system.
|
* The container that wraps around mods in the system.
|
||||||
* <p>
|
* <p>
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package cpw.mods.fml.common.asm;
|
||||||
|
|
||||||
|
import org.objectweb.asm.ClassReader;
|
||||||
|
import org.objectweb.asm.ClassWriter;
|
||||||
|
import org.objectweb.asm.Opcodes;
|
||||||
|
import org.objectweb.asm.Type;
|
||||||
|
import org.objectweb.asm.tree.ClassNode;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.registry.BlockProxy;
|
||||||
|
import cpw.mods.fml.relauncher.IClassTransformer;
|
||||||
|
|
||||||
|
public class ASMTransformer implements IClassTransformer
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public byte[] transform(String name, byte[] bytes)
|
||||||
|
{
|
||||||
|
if ("net.minecraft.src.Block".equals(name))
|
||||||
|
{
|
||||||
|
ClassReader cr = new ClassReader(bytes);
|
||||||
|
ClassNode cn = new ClassNode(Opcodes.ASM4);
|
||||||
|
cr.accept(cn, ClassReader.EXPAND_FRAMES);
|
||||||
|
cn.interfaces.add(Type.getInternalName(BlockProxy.class));
|
||||||
|
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS);
|
||||||
|
cn.accept(cw);
|
||||||
|
return cw.toByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -60,7 +60,7 @@ import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||||
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||||
import cpw.mods.fml.common.registry.TickRegistry;
|
import cpw.mods.fml.common.registry.TickRegistry;
|
||||||
import cpw.mods.fml.common.registry.WorldRegistry;
|
import cpw.mods.fml.common.registry.GameRegistry;
|
||||||
import cpw.mods.fml.common.ModContainer;
|
import cpw.mods.fml.common.ModContainer;
|
||||||
import cpw.mods.fml.common.ModMetadata;
|
import cpw.mods.fml.common.ModMetadata;
|
||||||
import cpw.mods.fml.common.ProxyInjector;
|
import cpw.mods.fml.common.ProxyInjector;
|
||||||
|
@ -348,7 +348,7 @@ public class ModLoaderModContainer implements ModContainer
|
||||||
{
|
{
|
||||||
ArrayList<A> modList = new ArrayList<A>();
|
ArrayList<A> modList = new ArrayList<A>();
|
||||||
|
|
||||||
for (ModContainer mc : Loader.getModList())
|
for (ModContainer mc : Loader.instance().getActiveModList())
|
||||||
{
|
{
|
||||||
if (mc instanceof ModLoaderModContainer && mc.getMod()!=null)
|
if (mc instanceof ModLoaderModContainer && mc.getMod()!=null)
|
||||||
{
|
{
|
||||||
|
@ -508,7 +508,7 @@ public class ModLoaderModContainer implements ModContainer
|
||||||
this.guiTickHandler.setMod(mod);
|
this.guiTickHandler.setMod(mod);
|
||||||
TickRegistry.registerTickHandler(this.gameTickHandler);
|
TickRegistry.registerTickHandler(this.gameTickHandler);
|
||||||
TickRegistry.registerTickHandler(this.guiTickHandler);
|
TickRegistry.registerTickHandler(this.guiTickHandler);
|
||||||
WorldRegistry.registerWorldGenerator(this.mod);
|
GameRegistry.registerWorldGenerator(this.mod);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
package cpw.mods.fml.common.registry;
|
||||||
|
|
||||||
|
public interface BlockProxy
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
|
@ -60,6 +60,7 @@ public class FMLRegistry
|
||||||
|
|
||||||
public static void registerBlock(Block block)
|
public static void registerBlock(Block block)
|
||||||
{
|
{
|
||||||
|
GameRegistry.registerBlock((BlockProxy)block);
|
||||||
instance.registerBlock(block);
|
instance.registerBlock(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,17 @@ import java.util.HashSet;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.google.common.collect.ArrayListMultimap;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
|
|
||||||
import cpw.mods.fml.common.IWorldGenerator;
|
import cpw.mods.fml.common.IWorldGenerator;
|
||||||
|
import cpw.mods.fml.common.Mod.Block;
|
||||||
|
import cpw.mods.fml.common.ModContainer;
|
||||||
|
|
||||||
public class WorldRegistry
|
public class GameRegistry
|
||||||
{
|
{
|
||||||
|
private static Multimap<ModContainer,BlockProxy> blockRegistry = ArrayListMultimap.create();
|
||||||
|
private static Multimap<ModContainer,ItemProxy> itemRegistry = ArrayListMultimap.create();
|
||||||
private static Set<IWorldGenerator> worldGenerators = new HashSet<IWorldGenerator>();
|
private static Set<IWorldGenerator> worldGenerators = new HashSet<IWorldGenerator>();
|
||||||
|
|
||||||
public static void registerWorldGenerator(IWorldGenerator generator)
|
public static void registerWorldGenerator(IWorldGenerator generator)
|
||||||
|
@ -30,4 +36,16 @@ public class WorldRegistry
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Object buildBlock(ModContainer container, Class<?> type, Block annotation) throws Exception
|
||||||
|
{
|
||||||
|
Object o = type.getConstructor(int.class).newInstance(250);
|
||||||
|
registerBlock((BlockProxy)o);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerBlock(BlockProxy block)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package cpw.mods.fml.common.registry;
|
||||||
|
|
||||||
|
public interface ItemProxy
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue