From 07a1927c25bbaf18281b576978a1108f7de4b814 Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 2 Jul 2012 23:49:40 -0400 Subject: [PATCH] Update some stuff --- fml/build.xml | 1 + .../cpw/mods/fml/client/FMLClientHandler.java | 39 ++++++--------- .../cpw/mods/fml/relauncher/ArgsWrapper.java | 11 +++++ .../relauncher/FMLEmbeddingRelauncher.java | 48 +++++++++++++++++++ .../fml/relauncher/RelaunchClassLoader.java | 31 ++++++++++++ fml/eclipse/FML-Client/.classpath | 1 + .../net/minecraft/client/Minecraft.java.patch | 23 +++++---- .../net/minecraft/src/GuiMainMenu.java.patch | 2 +- .../minecraft/src/NetClientHandler.java.patch | 4 +- .../minecraft/src/StatFileWriter.java.patch | 34 +++++++++++++ .../net/minecraft/src/World.java.patch | 2 +- .../src/ChunkProviderServer.java.patch | 2 +- .../net/minecraft/src/Entity.java.patch | 2 +- .../minecraft/src/NetServerHandler.java.patch | 2 +- .../src/ServerConfigurationManager.java.patch | 2 +- 15 files changed, 162 insertions(+), 42 deletions(-) create mode 100644 fml/common/cpw/mods/fml/relauncher/ArgsWrapper.java create mode 100644 fml/common/cpw/mods/fml/relauncher/FMLEmbeddingRelauncher.java create mode 100644 fml/common/cpw/mods/fml/relauncher/RelaunchClassLoader.java create mode 100644 fml/patches/minecraft/net/minecraft/src/StatFileWriter.java.patch diff --git a/fml/build.xml b/fml/build.xml index f10e34883..d4351eaf7 100644 --- a/fml/build.xml +++ b/fml/build.xml @@ -126,6 +126,7 @@ + diff --git a/fml/client/cpw/mods/fml/client/FMLClientHandler.java b/fml/client/cpw/mods/fml/client/FMLClientHandler.java index adcde0623..4ce22755b 100644 --- a/fml/client/cpw/mods/fml/client/FMLClientHandler.java +++ b/fml/client/cpw/mods/fml/client/FMLClientHandler.java @@ -794,11 +794,11 @@ public class FMLClientHandler implements IFMLSidedHandler @Override public ModMetadata readMetadataFrom(InputStream input, ModContainer mod) throws Exception { - JsonNode root=new JdomParser().func_27366_a(new InputStreamReader(input)); - List lst=root.func_27217_b(); + JsonNode root=new JdomParser().parse(new InputStreamReader(input)); + List lst=root.getArrayNode(); JsonNode modinfo = null; for (JsonNode tmodinfo : lst) { - if (mod.getName().equals(tmodinfo.func_27213_a("modid"))) { + if (mod.getName().equals(tmodinfo.getStringValue("modid"))) { modinfo = tmodinfo; break; } @@ -809,23 +809,23 @@ public class FMLClientHandler implements IFMLSidedHandler } ModMetadata meta=new ModMetadata(mod); try { - meta.name=modinfo.func_27213_a("name"); - meta.description=modinfo.func_27213_a("description").replace("\r", ""); - meta.version=modinfo.func_27213_a("version"); - meta.credits=modinfo.func_27213_a("credits"); - List authors=modinfo.func_27217_b("authors"); + meta.name=modinfo.getStringValue("name"); + meta.description=modinfo.getStringValue("description").replace("\r", ""); + meta.version=modinfo.getStringValue("version"); + meta.credits=modinfo.getStringValue("credits"); + List authors=modinfo.getArrayNode("authors"); StringBuilder sb=new StringBuilder(); for (int i=0; i screenshots=modinfo.getArrayNode("screenshots"); meta.screenshots=new String[screenshots.size()]; for (int i=0; i effects) { FMLClientHandler.instance().pruneOldTextureFX(texturepack, effects); diff --git a/fml/common/cpw/mods/fml/relauncher/ArgsWrapper.java b/fml/common/cpw/mods/fml/relauncher/ArgsWrapper.java new file mode 100644 index 000000000..141b9cdc7 --- /dev/null +++ b/fml/common/cpw/mods/fml/relauncher/ArgsWrapper.java @@ -0,0 +1,11 @@ +package cpw.mods.fml.relauncher; + +public class ArgsWrapper +{ + public ArgsWrapper(String[] args) + { + this.args=args; + } + + public String[] args; +} diff --git a/fml/common/cpw/mods/fml/relauncher/FMLEmbeddingRelauncher.java b/fml/common/cpw/mods/fml/relauncher/FMLEmbeddingRelauncher.java new file mode 100644 index 000000000..d924f816f --- /dev/null +++ b/fml/common/cpw/mods/fml/relauncher/FMLEmbeddingRelauncher.java @@ -0,0 +1,48 @@ +package cpw.mods.fml.relauncher; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.net.URLClassLoader; + +import net.minecraft.client.Minecraft; +import net.minecraft.src.WorldSettings; + +public class FMLEmbeddingRelauncher +{ + private static FMLEmbeddingRelauncher INSTANCE; + private RelaunchClassLoader clientLoader; + private RelaunchClassLoader serverLoader; + + public static void relaunch(ArgsWrapper wrap) + { + INSTANCE = new FMLEmbeddingRelauncher(); + INSTANCE.relaunchClient(wrap); + } + + private FMLEmbeddingRelauncher() + { + URLClassLoader ucl = (URLClassLoader)getClass().getClassLoader(); + + clientLoader = new RelaunchClassLoader(ucl.getURLs()); + serverLoader = new RelaunchClassLoader(ucl.getURLs()); + } + + private void relaunchClient(ArgsWrapper wrap) + { + try + { + Class original = Class.forName("net.minecraft.client.Minecraft", false, getClass().getClassLoader()); + Field origDir = original.getDeclaredField("field_6275_Z"); + origDir.setAccessible(true); + Class client = Class.forName("net.minecraft.client.Minecraft", false, clientLoader); + Field homeDir = client.getDeclaredField("field_6275_Z"); + homeDir.setAccessible(true); + homeDir.set(null, origDir.get(null)); + client.getMethod("fmlReentry", ArgsWrapper.class).invoke(null, wrap); + } + catch (Exception e) + { + e.printStackTrace(); + } + } +} diff --git a/fml/common/cpw/mods/fml/relauncher/RelaunchClassLoader.java b/fml/common/cpw/mods/fml/relauncher/RelaunchClassLoader.java new file mode 100644 index 000000000..5a4e72034 --- /dev/null +++ b/fml/common/cpw/mods/fml/relauncher/RelaunchClassLoader.java @@ -0,0 +1,31 @@ +package cpw.mods.fml.relauncher; + +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Arrays; + +public class RelaunchClassLoader extends URLClassLoader +{ + public RelaunchClassLoader(URL[] sources) + { + super(sources); + System.out.println(Arrays.toString(sources)); + } + + @Override + public Class loadClass(String name) throws ClassNotFoundException + { + if (name.startsWith("cpw.mods.fml.relauncher")) + { + return super.loadClass(name); + } + try + { + return findClass(name); + } + catch (ClassNotFoundException cnfe) + { + return super.loadClass(name); + } + } +} diff --git a/fml/eclipse/FML-Client/.classpath b/fml/eclipse/FML-Client/.classpath index d2da61e18..d75016750 100644 --- a/fml/eclipse/FML-Client/.classpath +++ b/fml/eclipse/FML-Client/.classpath @@ -20,5 +20,6 @@ + diff --git a/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch b/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch index 82f67e0bd..8083e157a 100644 --- a/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch +++ b/fml/patches/minecraft/net/minecraft/client/Minecraft.java.patch @@ -1,16 +1,18 @@ --- ../src-base/minecraft/net/minecraft/client/Minecraft.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src-work/minecraft/net/minecraft/client/Minecraft.java 0000-00-00 00:00:00.000000000 -0000 -@@ -120,6 +120,9 @@ +@@ -120,6 +120,11 @@ import org.lwjgl.opengl.PixelFormat; import org.lwjgl.util.glu.GLU; +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.common.FMLCommonHandler; ++import cpw.mods.fml.relauncher.ArgsWrapper; ++import cpw.mods.fml.relauncher.FMLEmbeddingRelauncher; + public abstract class Minecraft implements IPlayerUsage, Runnable { public static byte[] field_28006_b = new byte[10485760]; -@@ -301,6 +304,7 @@ +@@ -301,6 +306,7 @@ this.field_6315_n = new RenderEngine(this.field_6298_C, this.field_6304_y); this.func_6257_q(); this.field_6314_o = new FontRenderer(this.field_6304_y, "/font/default.png", this.field_6315_n, false); @@ -18,7 +20,7 @@ this.field_40007_r = new FontRenderer(this.field_6304_y, "/font/alternate.png", this.field_6315_n, false); if (this.field_6304_y.field_44018_Q != null) -@@ -332,6 +336,9 @@ +@@ -332,6 +338,9 @@ GL11.glMatrixMode(GL11.GL_PROJECTION); GL11.glLoadIdentity(); GL11.glMatrixMode(GL11.GL_MODELVIEW); @@ -28,9 +30,9 @@ this.func_6250_c("Startup"); this.field_6301_A.func_340_a(this.field_6304_y); this.field_6315_n.func_1066_a(this.field_9231_Y); -@@ -1337,11 +1344,13 @@ +@@ -1318,11 +1327,13 @@ - public void func_6246_i() throws IOException + public void func_6246_i() { + FMLCommonHandler.instance().rescheduleTicks(); if (this.field_35001_ab > 0) @@ -42,7 +44,7 @@ Profiler.func_40663_a("stats"); this.field_25001_G.func_27178_d(); Profiler.func_40661_c("gui"); -@@ -1710,6 +1719,7 @@ +@@ -1691,6 +1702,7 @@ } Profiler.func_40662_b(); @@ -50,7 +52,7 @@ this.field_6287_N = System.currentTimeMillis(); } -@@ -1854,6 +1864,7 @@ +@@ -1849,6 +1861,7 @@ System.gc(); this.field_6287_N = 0L; @@ -58,14 +60,15 @@ } public void func_6268_a(String p_6268_1_, File p_6268_2_) -@@ -1944,6 +1955,10 @@ +@@ -1940,6 +1953,11 @@ public static void main(String[] p_main_0_) { -+ FMLClientHandler.instance().preGameLoad(p_main_0_); ++ FMLEmbeddingRelauncher.relaunch(new ArgsWrapper(p_main_0_)); + } -+ public static void fmlReentry(String[] p_main_0_) ++ public static void fmlReentry(ArgsWrapper wrapper) + { ++ String[] p_main_0_ = wrapper.args; HashMap var1 = new HashMap(); boolean var2 = false; boolean var3 = true; diff --git a/fml/patches/minecraft/net/minecraft/src/GuiMainMenu.java.patch b/fml/patches/minecraft/net/minecraft/src/GuiMainMenu.java.patch index d0d7e937e..f962ba9b4 100644 --- a/fml/patches/minecraft/net/minecraft/src/GuiMainMenu.java.patch +++ b/fml/patches/minecraft/net/minecraft/src/GuiMainMenu.java.patch @@ -39,7 +39,7 @@ + } if (p_572_1_.field_938_f == 11) { - this.field_945_b.func_56442_a("Demo_World", DemoWorldServer.field_56874_a); + this.field_945_b.func_58039_a("Demo_World", "Demo_World", DemoWorldServer.field_56874_a); @@ -399,7 +409,11 @@ var9 = var9 + " Demo"; } diff --git a/fml/patches/minecraft/net/minecraft/src/NetClientHandler.java.patch b/fml/patches/minecraft/net/minecraft/src/NetClientHandler.java.patch index fc19b951e..b4c718062 100644 --- a/fml/patches/minecraft/net/minecraft/src/NetClientHandler.java.patch +++ b/fml/patches/minecraft/net/minecraft/src/NetClientHandler.java.patch @@ -1,6 +1,6 @@ --- ../src-base/minecraft/net/minecraft/src/NetClientHandler.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src-work/minecraft/net/minecraft/src/NetClientHandler.java 0000-00-00 00:00:00.000000000 -0000 -@@ -22,6 +22,8 @@ +@@ -20,6 +20,8 @@ import net.minecraft.client.Minecraft; import org.lwjgl.input.Keyboard; @@ -9,7 +9,7 @@ public class NetClientHandler extends NetHandler { private boolean field_55324_f = false; -@@ -1157,4 +1159,13 @@ +@@ -1165,4 +1167,13 @@ { return this.field_1213_d; } diff --git a/fml/patches/minecraft/net/minecraft/src/StatFileWriter.java.patch b/fml/patches/minecraft/net/minecraft/src/StatFileWriter.java.patch new file mode 100644 index 000000000..f88f0d332 --- /dev/null +++ b/fml/patches/minecraft/net/minecraft/src/StatFileWriter.java.patch @@ -0,0 +1,34 @@ +--- ../src-base/minecraft/net/minecraft/src/StatFileWriter.java 0000-00-00 00:00:00.000000000 -0000 ++++ ../src-work/minecraft/net/minecraft/src/StatFileWriter.java 0000-00-00 00:00:00.000000000 -0000 +@@ -124,17 +124,17 @@ + { + String var2 = "local"; + StringBuilder var3 = new StringBuilder(); +- JsonRootNode var4 = (new JdomParser()).func_27367_a(p_27177_0_); +- List var5 = var4.func_27217_b(new Object[] {"stats-change"}); ++ JsonRootNode var4 = (new JdomParser()).parse(p_27177_0_); ++ List var5 = var4.getArrayNode(new Object[] {"stats-change"}); + Iterator var6 = var5.iterator(); + + while (var6.hasNext()) + { + JsonNode var7 = (JsonNode)var6.next(); +- Map var8 = var7.func_27214_c(); ++ Map var8 = var7.getFields(); + Entry var9 = (Entry)var8.entrySet().iterator().next(); +- int var10 = Integer.parseInt(((JsonStringNode)var9.getKey()).func_27216_b()); +- int var11 = Integer.parseInt(((JsonNode)var9.getValue()).func_27216_b()); ++ int var10 = Integer.parseInt(((JsonStringNode)var9.getKey()).getText()); ++ int var11 = Integer.parseInt(((JsonNode)var9.getValue()).getText()); + StatBase var12 = StatList.func_27361_a(var10); + + if (var12 == null) +@@ -152,7 +152,7 @@ + MD5String var14 = new MD5String(var2); + String var15 = var14.func_27369_a(var3.toString()); + +- if (!var15.equals(var4.func_27213_a(new Object[] {"checksum"}))) ++ if (!var15.equals(var4.getNode(new Object[] {"checksum"}))) + { + System.out.println("CHECKSUM MISMATCH"); + return null; diff --git a/fml/patches/minecraft/net/minecraft/src/World.java.patch b/fml/patches/minecraft/net/minecraft/src/World.java.patch index 75b95e4f6..f3d419da6 100644 --- a/fml/patches/minecraft/net/minecraft/src/World.java.patch +++ b/fml/patches/minecraft/net/minecraft/src/World.java.patch @@ -1,6 +1,6 @@ --- ../src-base/minecraft/net/minecraft/src/World.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src-work/minecraft/net/minecraft/src/World.java 0000-00-00 00:00:00.000000000 -0000 -@@ -3320,7 +3320,7 @@ +@@ -3322,7 +3322,7 @@ public double func_46068_G() { diff --git a/fml/patches/minecraft_server/net/minecraft/src/ChunkProviderServer.java.patch b/fml/patches/minecraft_server/net/minecraft/src/ChunkProviderServer.java.patch index d8698962d..76fda3edb 100644 --- a/fml/patches/minecraft_server/net/minecraft/src/ChunkProviderServer.java.patch +++ b/fml/patches/minecraft_server/net/minecraft/src/ChunkProviderServer.java.patch @@ -9,7 +9,7 @@ public class ChunkProviderServer implements IChunkProvider { private Set field_725_a = new HashSet(); -@@ -173,6 +175,7 @@ +@@ -177,6 +179,7 @@ if (this.field_730_c != null) { this.field_730_c.func_4055_a(p_4055_1_, p_4055_2_, p_4055_3_); diff --git a/fml/patches/minecraft_server/net/minecraft/src/Entity.java.patch b/fml/patches/minecraft_server/net/minecraft/src/Entity.java.patch index 127adfd03..5beea42bd 100644 --- a/fml/patches/minecraft_server/net/minecraft/src/Entity.java.patch +++ b/fml/patches/minecraft_server/net/minecraft/src/Entity.java.patch @@ -1,6 +1,6 @@ --- ../src-base/minecraft_server/net/minecraft/src/Entity.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src-work/minecraft_server/net/minecraft/src/Entity.java 0000-00-00 00:00:00.000000000 -0000 -@@ -1525,4 +1525,8 @@ +@@ -1539,4 +1539,8 @@ { return String.format("%s[\'%s\'/%d, l=\'%s\', x=%.2f, y=%.2f, z=%.2f]", new Object[] {this.getClass().getSimpleName(), this.func_35150_Y(), Integer.valueOf(this.field_331_c), this.field_9093_l == null ? "~NULL~" : this.field_9093_l.func_22081_n().func_55310_h(), Double.valueOf(this.field_322_l), Double.valueOf(this.field_321_m), Double.valueOf(this.field_320_n)}); } diff --git a/fml/patches/minecraft_server/net/minecraft/src/NetServerHandler.java.patch b/fml/patches/minecraft_server/net/minecraft/src/NetServerHandler.java.patch index df8771815..ee18da9b1 100644 --- a/fml/patches/minecraft_server/net/minecraft/src/NetServerHandler.java.patch +++ b/fml/patches/minecraft_server/net/minecraft/src/NetServerHandler.java.patch @@ -9,7 +9,7 @@ import net.minecraft.server.MinecraftServer; public class NetServerHandler extends NetHandler -@@ -1011,4 +1013,9 @@ +@@ -1014,4 +1016,9 @@ } } } diff --git a/fml/patches/minecraft_server/net/minecraft/src/ServerConfigurationManager.java.patch b/fml/patches/minecraft_server/net/minecraft/src/ServerConfigurationManager.java.patch index 8bc2914d3..b8a3b0ac3 100644 --- a/fml/patches/minecraft_server/net/minecraft/src/ServerConfigurationManager.java.patch +++ b/fml/patches/minecraft_server/net/minecraft/src/ServerConfigurationManager.java.patch @@ -9,7 +9,7 @@ import net.minecraft.server.MinecraftServer; public abstract class ServerConfigurationManager -@@ -359,6 +361,8 @@ +@@ -355,6 +357,8 @@ p_28168_1_.field_425_ad.func_35694_a(var5); this.func_28170_a(p_28168_1_, var5); this.func_30008_g(p_28168_1_);