Compare commits

...
108 Commits
Author SHA1 Message Date
Christian 95afc95b24 Update mcp mod info 2013-09-18 17:02:41 -04:00
Christian 34493b0d99 Update for real 1.6.3 update 2013-09-18 16:59:28 -04:00
Christian e77d2547ad Update for pre-ninja 1.6.3 update 2013-09-18 16:33:11 -04:00
Christian 40a34af431 Merge branch 'master' into newtweak 2013-09-18 14:49:53 -04:00
Christian 352117fd78 Update for new installer and thank you. 2013-09-17 21:56:25 -04:00
Christian 81328b6684 Add in support for using a mirror list and provide checksums for packed download of libs 2013-09-15 22:58:39 -04:00
Christian b5af446d71 Fix sidedness derp in LanguageRegistry. 2013-09-13 19:04:25 -05:00
Christian d0c6e92900 Update MCP data 2013-09-03 17:56:09 -04:00
Christian 2a9c485edc Remove @SideOnly from 70318 (getDistance) it makes no sense that it's not on the server. 2013-09-02 12:24:17 -04:00
Christian a13598b17e Use java 1.6 compatible method of closing the zip file. Stops stupid compile error. 2013-09-02 00:12:36 -04:00
Christian 40b54013b4 Allow server side lang file injection, hopefully 2013-08-27 22:45:10 -04:00
Christian 1c9a853868 Allow coremods to properly inject asset readers. 2013-08-27 12:31:37 -04:00
Christian da70cdd35a Update tweaker for new Launcher API 2013-08-23 10:42:26 -04:00
Christian b993cf4a98 More exception handling for less derpiness. 2013-08-20 20:46:18 -04:00
Christian ac065ff5f7 Reset the IWorldGenerator seed for each mod, before calling. That should mean worldgen is consistent
and not dependent on mod ordering, or mod sideeffects.
2013-08-19 14:56:01 -04:00
Christian 913f6f6d36 Try and use the relaunch log, which should be classloaded.. 2013-08-19 14:55:37 -04:00
Christian 9468e41bbf Fix up scala refs, for better results 2013-08-18 18:58:36 -04:00
Christian ffdd056a18 Check keys, not values *sigh* 2013-08-17 13:27:43 -04:00
Christian f157e7a6ec And more coremod logging 2013-08-17 13:14:55 -04:00
Christian 4a9d0f9bd5 Add in some log information 2013-08-17 13:10:28 -04:00
Christian 0398916666 And actually instantiate the collection *sigh* 2013-08-17 12:57:15 -04:00
Christian dec9a3924d Add in "FMLCorePluginContainsMod" in the manifest. If this value is
present, FML will attempt to parse your mod jar file as a normal mod
file as well, instantiating mod containers there.
2013-08-17 12:48:38 -04:00
Christian 2470120680 Clean up a couple of resources. Also, don't parse jars just because
they're in the mods dir
2013-08-17 11:40:15 -04:00
Christian ba90b61607 Make sure we only add args to the argument list if a tweaker hasn't already.
Should fix LiteLoader compatibility issue.
2013-08-16 16:28:55 -04:00
Christian 9a5e24e338 Fix stupid derp is stupid. Closes #275 and means sp614x can do his thing 2013-08-16 16:18:50 -04:00
LexManos 29ef3d5ab4 Update installer. 2013-08-06 11:42:38 -07:00
LexManos f46a538b41 Merge pull request #268 from Bo98/sh-args-fix
Fixed install.sh not passing arguments to install.py
2013-08-04 15:32:06 -07:00
Bo 182aa9c0cb Fixed install.sh not passing arguments to install.py 2013-08-03 17:43:57 +01:00
cpw 1857064afa Merge pull request #266 from grompe/patch-1
Add missing SideOnly in BaseMod
2013-08-01 04:21:22 -07:00
Grom PE cb05c8c4aa Add missing SideOnly in BaseMod
NetClientHandler exists only on client side and thus method using it should be annotated with SideOnly.
2013-08-01 14:19:30 +07:00
cpw f275a24b43 Add in some reverse lookup methods for game registry data 2013-07-29 22:05:22 +02:00
cpw 1d84e8063e Temporarily add a version of 'reobfuscate.py' that will resolve complex
reobfuscation graph issues with specialsource. Copy it over 'reobfuscate.py'
in the mcp runtime dir. Hopefully will have an MCP/specialsource fix in
the coming days.
2013-07-28 22:38:26 +02:00
cpw 57befa89bb Fix keybindings being derped 2013-07-28 20:52:12 +02:00
LexManos 10b16d32da Use json 2.9.1 nightly for OSX in release json like vanilla does. 2013-07-17 12:21:26 -07:00
LexManos 3f21a2c1b4 Stupid spaces and windows escaping -.- 2013-07-16 14:34:43 -07:00
LexManos b2958c9066 Add quotes for paths with spaces -.- 2013-07-16 13:35:14 -07:00
LexManos 9520978b81 Use a temporary file for recompile's command line to combat command length to long issues. 2013-07-16 13:08:26 -07:00
LexManos 4981aa3421 Fix potential NPE in villager skin registry. 2013-07-16 10:32:29 -07:00
LexManos c48b48ee15 Fix server launching. 2013-07-15 10:57:44 -07:00
Christian 9947ba8503 Fix logo handling. no more NPE if the logo can't be found. Also, fix location of mcp logo now. 2013-07-14 13:40:55 -04:00
Christian a3f48734ff Fix up jar sanity check code. FML validation of the jar works now and doesn't derp classloading. 2013-07-14 13:11:32 -04:00
Christian 0378355c37 The server.classpath generates the runtime manifest, so it needs the
non-debug asm jars.
2013-07-14 11:12:42 -04:00
LexManos c625ef3009 Update Forge signature for new private key 2013-07-12 03:05:20 -07:00
LexManos d4b30422b6 Update build and eclipse workspaces for debug asm. 2013-07-12 00:22:11 -07:00
Christian 6de36d78f5 Coremods now have a primitive dependency capability. Also, we search mods dir for special
"TweakClass" manifests. These are using the vanilla tweak mechanism to inject into
Minecraft. Helpful for other "platform" systems, when you don't want to have to deal
with json changes!
2013-07-11 23:23:33 -04:00
LexManos 7348929819 Kill release time scala libraries, to be re-evaluated after all movement is done and shit is fixed. May require manual instalation for mods that use scala. 2013-07-11 15:24:54 -07:00
LexManos b9f4b02cb0 Kill mcp's truncate method, for more useful logs. 2013-07-10 15:23:21 -07:00
Christian 20e93a412e Fix up logos in the mod screen. Clean up some unnecessary casts and suppressions, use the -debug asm
library at dev time, since it contains full symbols and code in compiled form.
2013-07-10 15:47:13 -04:00
Christian e44e8b3112 Force a global asset scan prior to mod construction : you should be able to
reference assets anywhere in your mod now.
2013-07-10 00:42:40 -04:00
Christian bab4d87ce7 Update FML for new stealth update for 1.6.2 2013-07-09 15:00:28 -04:00
cpw bc9d1fe657 Merge pull request #254 from CaptainShadows/patch-1
@InstanceFactory was set to look for Fields instead of methods
2013-07-09 07:19:24 -07:00
Christian d4d522c597 And don't forget to remove the test code 2013-07-09 08:31:40 -04:00
Christian 97269a5e3d Decode the file URL. Hopefully will make things work more.. 2013-07-09 08:30:47 -04:00
LexManos c913258ca3 Disable signature check of client for now, it's broken. 2013-07-09 05:04:11 -07:00
LexManos c7ab872c85 Temporarily disable GuiModList's Mod logos. 2013-07-09 03:27:49 -07:00
LexManos e91431fb70 Don't validate signatures on servers, they are not signed. 2013-07-09 03:27:29 -07:00
LexManos dfa3a2665d Add MC Version to installed version name. 2013-07-09 03:27:01 -07:00
LexManos 4fa375683f Fix NPE in new debug line when patch targets don't exist. 2013-07-09 01:21:50 -07:00
Christian 0db4624b27 Don't initialize the server. 2013-07-08 22:31:15 -04:00
Christian c997f2adbc FML now verifies that the minecraft jar is correct and intact. This is intended to discourage those who think that
modifying the minecraft jar is still acceptable.
2013-07-08 22:10:06 -04:00
Christian 26e5f4b4ff Test server-siding ResourceLocation 2013-07-08 19:31:00 -04:00
Christian 2336002f20 The game is going to exit in face of patch mismatch, unless you force it to run with fml.ignorePatchDiscrepancies in the system properties. 2013-07-08 14:34:03 -04:00
Christian e88a0cd13f Update for stealth update. Thanks mojang! 2013-07-08 13:19:55 -04:00
Christian dbf5fe38ce We now generate an adler32 checksum for each patched file and verify at load time that they match.
Mismatch won't crash, but will emit a big warning..
2013-07-08 13:19:14 -04:00
Christian c47d08c89d Tweak debug data on patched classes 2013-07-08 12:28:32 -04:00
Captain Shadows 7af5c21d74 @InstanceFactory was set to look for Fields instead of methods
"fix it" to now match the javadoc :P

if it was set like that so modders wouldn't use it, it might be better to just say so in the documentation
2013-07-08 00:07:54 -04:00
LexManos 6f96d89e2b Update eclipse workspaces for 1.6.2 2013-07-07 13:11:22 -07:00
Christian 111b0216fd Add the jsons for 1.6.2 2013-07-07 16:05:53 -04:00
Christian 1d0384f8f6 Update for 1.6.2 and MCP 8.04 2013-07-07 15:49:11 -04:00
Christian adc8972277 Add cascadedTweaks. This will allow simple coexistence for any other mod framework using
the tweaker system as well. Hi Voxel and LiteLoader!
2013-07-06 22:26:03 -04:00
cpw 5990e29af7 Merge pull request #247 from jk-5/patch-1
Pull request for #232
2013-07-06 18:54:54 -07:00
Christian 2676c8999c Update mcp data. fixes #248 2013-07-06 21:25:36 -04:00
Christian 3a200e901e Fix coremod injection into main system. Should stop double-dipping coremods. 2013-07-06 20:51:00 -04:00
Jeffrey Kog c97ac284a5 Update ModLoaderFuelHelper.java 2013-07-04 08:33:03 +02:00
LexManos 54e06e841d Move Resource refreshing until affter postInit. 2013-07-03 22:29:10 -07:00
LexManos 7ce84491d1 Fix missing argument and startclient/startserver support. 2013-07-03 19:30:30 -07:00
LexManos 532bee7ce1 Update to new MCP bugfix version, Fixes: Missing Armor/Item rendering, and Boss health mapping issues. 2013-07-03 18:23:38 -07:00
LexManos e24f949517 Fix eclipse workspaces and launch configurations. 2013-07-03 18:22:57 -07:00
LexManos 4545beb49d Add deobf-data to setup env. 2013-07-03 18:22:06 -07:00
Christian 3f4bf61ae6 Update key 2013-07-03 08:28:59 -04:00
Christian 155e846818 Add in support for mods/<mcversion> as a mod location. Also drop coremods as a location. They go in mods too now. 2013-07-02 23:03:01 -04:00
Christian ba3707af22 More javadoc cleanup 2013-07-02 19:39:02 -04:00
Christian ad79b9ed86 Fix up some deprecation warnings, and clean up coremod code that's going
away.
2013-07-02 19:27:50 -04:00
Christian 5f7df5e742 Revert "Keep these on our servers until the launcher is actually fixed -.-"
This reverts commit f1b533ad87.
2013-07-02 19:03:06 -04:00
Christian 7aa7221756 Fix transformer search 2013-07-02 18:40:23 -04:00
cpw 8844554da6 Merge pull request #243 from jrtc27/modclassloader
Fixed ClassCastException when loading ModLoader mods
2013-07-02 15:32:35 -07:00
James Clarke 6f0eedc9a6 Fixed ClassCastException when loading ModLoader mods 2013-07-02 20:48:00 +01:00
Christian f21cd286ca Resource packs, part two. FML mods are now resource packs. Vanilla will scan anything under 'assets'
and turn it into a resource prefix. Use resourcelocations to look stuff up.
2013-07-02 11:11:50 -04:00
LexManos f1b533ad87 Keep these on our servers until the launcher is actually fixed -.- 2013-07-01 23:26:40 -07:00
Christian 5a97d183df Remember to update your patches!!!! 2013-07-02 02:14:31 -04:00
Christian fbd57b3264 Mods are now loaded as resource packs. Vanilla will scan for valid prefixes based on subdirs of 'assets' which
can then be referenced as ResourceLocations with the "<prefix>:path" notation.
2013-07-02 01:39:40 -04:00
Christian efc369ee83 Fix EventHandler annotation. 2013-07-02 01:08:51 -04:00
Christian 91ecf71109 Fix -rel json 2013-07-02 01:02:02 -04:00
LexManos 9b6525e805 Point scala downloads to our servers, Launcher doesn't like standard maven repos. 2013-07-01 21:53:13 -07:00
LexManos dc7d02ebf6 Fix json syntax error. 2013-07-01 20:33:26 -07:00
Christian 7037184a4e Fix up release JSON 2013-07-01 23:14:31 -04:00
Christian bf38d94756 Update json samples 2013-07-01 22:58:08 -04:00
LexManos 3d17434510 Build installer package for the new client launcher. 2013-07-01 19:40:19 -07:00
LexManos 29d6c875d0 Add FML Installer logo crated by @ZaverSLO https://twitter.com/ZaverSLO/status/349947190300508162 2013-07-01 19:38:44 -07:00
LexManos 902772ed0c Revert common folder fix, Common folder does nothing, feel free to delete it after first load. 2013-07-01 16:25:11 -07:00
LexManos 1229c4c4ea Fix src distrabution, and got rid of pesky common folder in eclipse workspace. src is now installable. 2013-07-01 15:50:49 -07:00
Christian 7fecf2ad6b Update mcp URL. 2013-07-01 11:06:20 -04:00
Christian c418da353f Cleanup coremod code, server side working now. 2013-06-30 22:51:56 -04:00
LexManos 110cf372eb Add deobf data to merge-common, worspace is now actually runnable! 2013-06-30 19:41:51 -07:00
LexManos 7a004087f7 Add deobf data to src dist.
Dont create deobf jar as we ship the lzma
Added *.lzma to .gitignore
2013-06-30 19:15:53 -07:00
LexManos 70cfe24e67 Fix wrong project name in distro eclipse launch. 2013-06-30 18:33:26 -07:00
LexManos 8960f6869f Add windows lzma executable
http://tukaani.org/xz/
He states that most things are under public domain, But I couldn't find an exact reference to this executable.
I'm going to assume it under public domain and distribuiting it here is fine. If not someone please direct me to the apropriate license and I will act accordingly.
2013-06-30 18:31:24 -07:00
Christian 71a92de5d9 Client launch for eclipse 2013-06-30 21:06:33 -04:00
104 changed files with 22656 additions and 21060 deletions

No files matched your search

+3
View File
@@ -15,3 +15,6 @@ fmlbranding.properties
/binpatch
/mcp_data/
/map_client.txt
/*.lzma
**/*.lzma
/installer_base.jar
+56 -10
View File
@@ -131,9 +131,10 @@
</copy>
</target>
<target name="merge-common">
<target name="merge-common" depends="buildenvsetup,build-deobf-data">
<copy todir="${client.mcp.srcdir}" overwrite="true" verbose="true">
<fileset dir="${common.src.dir}" includes="**/*.java" />
<fileset dir="${basedir}" includes="deobfuscation_data-${version.minecraft}.lzma"/>
</copy>
</target>
@@ -145,21 +146,33 @@
</condition>
<mkdir dir="${basedir}/target" />
<jar destfile="${basedir}/target/${universal.jarname}.zip" duplicate="preserve">
<path id="server.classpath">
<pathelement path="${mcp.home}/jars/libraries/net/minecraft/launchwrapper/1.3/launchwrapper-1.3.jar"/>
<pathelement path="${mcp.home}/jars/libraries/org/ow2/asm/asm-all/4.1/asm-all-4.1.jar"/>
<pathelement path="${mcp.home}/jars/libraries/lzma/lzma/0.0.1/lzma-0.0.1.jar"/>
<pathelement path="${mcp.home}/jars/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.jar"/>
<pathelement path="${mcp.home}/jars/libraries/org/scala-lang/scala-library/2.10.2/scala-library-2.10.2.jar"/>
<pathelement path="${mcp.home}/jars/libraries/org/scala-lang/scala-compiler/2.10.2/scala-compiler-2.10.2.jar"/>
<pathelement path="${mcp.home}/jars/minecraft_server.${version.minecraft}.jar"/>
</path>
<manifestclasspath property="server.jar.classpath" jarfile="${mcp.home}/jars/minecraft_server.jar">
<classpath refid="server.classpath" />
</manifestclasspath>
<jar destfile="${basedir}/target/${universal.jarname}.jar" duplicate="preserve">
<manifest>
<attribute name="Main-Class" value="cpw.mods.fml.relauncher.ServerLaunchWrapper" />
<attribute name="Class-Path" value="minecraft_server.jar:lib/guava-14.0-rc3.jar:lib/bcprov-jdk15on-148-src.zip:lib/asm-debug-all-4.1.jar:lib/scala-library.jar:lib/argo-3.2-src.jar" />
<attribute name="Class-Path" value="${server.jar.classpath}" />
</manifest>
<fileset dir="${client.mcp.obfoutput}" includes="**/*.class" excludes="*.class,net/minecraft/**/*.class" />
</jar>
<antcall target="signjar" />
<zip update="true" destfile="${basedir}/target/${universal.jarname}.zip">
<zip update="true" destfile="${basedir}/target/${universal.jarname}.jar">
<fileset dir="${basedir}" includes="binpatches.pack.lzma,deobfuscation_data-${version.minecraft}.lzma"/>
<fileset dir="${client.mcp.obfoutput}" includes="*.class" />
<zipfileset dir="${basedir}" includes="fmlversion.properties" />
<zipfileset dir="${basedir}" includes="LICENSE-fml.txt" />
<zipfileset dir="${common.src.dir}" includes="mcpmod.info" />
<zipfileset dir="${client.src.dir}" includes="mcp.png" />
<zipfileset dir="${client.src.dir}" includes="mcplogo.png" />
<zipfileset dir="${basedir}" includes="install/CREDITS-fml.txt" fullpath="CREDITS-fml.txt" />
<zipfileset dir="${common.src.dir}" includes="*.cfg" />
<mappedresources>
@@ -180,10 +193,39 @@
</zip>
</target>
<target name="build-installer" depends="build-universal">
<condition property="version.fullname" value="${version.minecraft}-${version}" else="${version.minecraft}-${version}-${version.branch}">
<equals arg1="${version.branch}" arg2="master" />
</condition>
<tstamp>
<format property="current.time" pattern="yyyy-MM-dd'T'HH:mm:ssZ" />
</tstamp>
<delete file="${basedir}/installer_base.jar" />
<delete file="${basedir}/install_profile.json" />
<get src="http://files.minecraftforge.net/installer/forge-installer-1.3-shrunk.jar" dest="${basedir}/installer_base.jar" />
<copy file="${basedir}/jsons/${version.minecraft}-rel.json" tofile="${basedir}/install_profile.json" />
<copy file="${basedir}/installer_base.jar" tofile="${basedir}/target/${modname}-installer-${version.fullname}.jar" />
<replace file="${basedir}/install_profile.json">
<replaceFilter token="@version@" value="${version}" />
<replaceFilter token="@minecraft_version@" value="${version.minecraft}" />
<replaceFilter token="@timestamp@" value="${current.time}" />
<replaceFilter token="@universal_jar@" value="${modname}-universal-${version.fullname}.jar" />
</replace>
<jar destfile="${basedir}/target/${modname}-installer-${version.fullname}.jar" update="true">
<zipfileset dir="${basedir}" includes="install_profile.json" />
<zipfileset dir="${basedir}/jsons" includes="big_logo.png" />
<zipfileset dir="${basedir}/target" includes="${modname}-universal-${version.fullname}.jar" />
</jar>
<delete file="${basedir}/install_profile.json" />
</target>
<target name="build-source-pack" depends="makeversion">
<property name="srcpack.jarname" value="${modname}-src-${version.minecraft}-${version}-${version.branch}" />
<zip destfile="${basedir}/target/${srcpack.jarname}.zip">
<zipfileset dir="${basedir}" includes="LICENSE-fml.txt,difflist.txt,commands.patch,mcp_merge.cfg,mc_versions.cfg" prefix="fml" />
<zipfileset dir="${basedir}/jsons" includes="${version.minecraft}-dev.json" fullpath="fml/fml.json"/>
<zipfileset dir="${basedir}" includes="deobfuscation_data-${version.minecraft}.lzma" prefix="fml/common" />
<zipfileset dir="${common.src.dir}" includes="**/*.java" prefix="fml/common" />
<zipfileset dir="${client.src.dir}" includes="**/*.java" prefix="fml/client" />
<zipfileset dir="${client.src.dir}" includes="mcp.png" prefix="fml/client" />
@@ -230,12 +272,9 @@
</copy>
<antcall target="writeversion" />
<delete dir="build-tmp-deobf" />
<zip destfile="deobfuscation_data-${version.minecraft}.jar" basedir="${basedir}">
<include name="deobfuscation_data-${version.minecraft}.lzma"/>
</zip>
</target>
<target name="build" depends="buildenvsetup,merge-client,merge-common,build-deobf-data,build-universal,build-source-pack" />
<target name="build" depends="buildenvsetup,build-deobf-data,merge-client,merge-common,build-universal,build-installer,build-source-pack" />
<target name="jenkinsbuild" depends="buildenvsetup,jenkinsfmldecompile,patch,build" />
@@ -274,6 +313,13 @@
<fileset dir="${mcp.srcdir}" />
</copy>
<antcall target="writeversion" />
<delete>
<fileset dir="${basedir}" includes="deobfuscation_data-*.lzma" />
</delete>
<antcall target="build-deobf-data" />
<copy todir="${common.src.dir}">
<fileset dir="${basedir}" includes="deobfuscation_data-*.lzma" />
</copy>
<antcall target="makeeclipse" />
<echo>Setup complete! You should now be able to open ${basedir}/eclipse as a workspace in eclipse and import/refresh the FML project</echo>
</target>
@@ -388,7 +434,7 @@
<target name="makebinpatches" depends="buildenvsetup,makeversion">
<path id="diffset.libs">
<pathelement path="${mcp.home}/jars/libraries/com/google/guava/guava/14.0/guava-14.0.jar"/>
<pathelement path="${mcp.home}/jars/libraries/org/ow2/asm/asm-all/4.1/asm-all-4.1.jar"/>
<pathelement path="${mcp.home}/jars/libraries/org/ow2/asm/asm-debug-all/4.1/asm-debug-all-4.1.jar"/>
<pathelement path="${mcp.home}/jars/libraries/lzma/lzma/0.0.1/lzma-0.0.1.jar"/>
<pathelement path="${mcp.obfoutput}/minecraft"/>
</path>
@@ -12,6 +12,8 @@
*/
package cpw.mods.fml.client;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -28,6 +30,11 @@ import net.minecraft.client.multiplayer.NetClientHandler;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.resources.FileResourcePack;
import net.minecraft.client.resources.FolderResourcePack;
import net.minecraft.client.resources.ReloadableResourceManager;
import net.minecraft.client.resources.ResourcePack;
import net.minecraft.client.resources.SimpleReloadableResourceManager;
import net.minecraft.crash.CrashReport;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
@@ -44,6 +51,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.MapDifference;
import com.google.common.collect.MapDifference.ValueDifference;
import com.google.common.collect.Maps;
import cpw.mods.fml.client.modloader.ModLoaderClientHelper;
import cpw.mods.fml.client.registry.KeyBindingRegistry;
@@ -78,7 +86,7 @@ import cpw.mods.fml.relauncher.Side;
/**
* Handles primary communication from hooked code into the system
*
* The FML entry point is {@link #beginMinecraftLoading(Minecraft)} called from
* The FML entry point is {@link #beginMinecraftLoading(Minecraft, List)} called from
* {@link Minecraft}
*
* Obfuscated code should focus on this class and other members of the "server"
@@ -116,7 +124,7 @@ public class FMLClientHandler implements IFMLSidedHandler
private ModSortingException modSorting;
private boolean loading;
private boolean loading = true;
private WrongMinecraftVersionException wrongMC;
@@ -126,14 +134,25 @@ public class FMLClientHandler implements IFMLSidedHandler
private boolean serverShouldBeKilledQuietly;
private List<ResourcePack> resourcePackList;
private ReloadableResourceManager resourceManager;
private Map<String, ResourcePack> resourcePackMap;
/**
* Called to start the whole game off
*
* @param minecraft The minecraft instance being launched
* @param resourcePackList The resource pack list we will populate with mods
* @param resourceManager The resource manager
*/
public void beginMinecraftLoading(Minecraft minecraft)
public void beginMinecraftLoading(Minecraft minecraft, List resourcePackList, ReloadableResourceManager resourceManager)
{
client = minecraft;
this.resourcePackList = resourcePackList;
this.resourceManager = resourceManager;
this.resourcePackMap = Maps.newHashMap();
if (minecraft.func_71355_q())
{
FMLLog.severe("DEMO MODE DETECTED, FML will not work. Finishing now.");
@@ -141,7 +160,6 @@ public class FMLClientHandler implements IFMLSidedHandler
return;
}
loading = true;
// TextureFXManager.instance().setClient(client);
FMLCommonHandler.instance().beginLoading(this);
new ModLoaderClientHelper(client);
@@ -223,7 +241,8 @@ public class FMLClientHandler implements IFMLSidedHandler
haltGame("There was a severe problem during mod loading that has caused the game to fail", le);
return;
}
LanguageRegistry.reloadLanguageTable();
// Reload resources
client.func_110436_a();
RenderingRegistry.instance().loadEntityRenderers((Map<Class<? extends Entity>, Render>)RenderManager.field_78727_a.field_78729_o);
loading = false;
@@ -550,4 +569,47 @@ public class FMLClientHandler implements IFMLSidedHandler
{
return client.field_71462_r != null && client.field_71462_r.getClass().equals(gui);
}
@Override
public void addModAsResource(ModContainer container)
{
Class<?> resourcePackType = container.getCustomResourcePackClass();
if (resourcePackType != null)
{
try
{
ResourcePack pack = (ResourcePack) resourcePackType.getConstructor(ModContainer.class).newInstance(container);
resourcePackList.add(pack);
resourcePackMap.put(container.getModId(), pack);
}
catch (NoSuchMethodException e)
{
FMLLog.log(Level.SEVERE, "The container %s (type %s) returned an invalid class for it's resource pack.", container.getName(), container.getClass().getName());
return;
}
catch (Exception e)
{
FMLLog.log(Level.SEVERE, e, "An unexpected exception occurred constructing the custom resource pack for %s", container.getName());
throw Throwables.propagate(e);
}
}
}
@Override
public void updateResourcePackList()
{
client.func_110436_a();
}
public ResourcePack getResourcePackFor(String modId)
{
return resourcePackMap.get(modId);
}
@Override
public String getCurrentLanguage()
{
return client.func_135016_M().func_135041_c().func_135034_a();
}
}
@@ -0,0 +1,62 @@
package cpw.mods.fml.client;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import javax.imageio.ImageIO;
import com.google.common.base.Charsets;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.ModContainer;
import net.minecraft.client.resources.FileResourcePack;
public class FMLFileResourcePack extends FileResourcePack {
private ModContainer container;
public FMLFileResourcePack(ModContainer container)
{
super(container.getSource());
this.container = container;
}
@Override
public String func_130077_b()
{
return "FMLFileResourcePack:"+container.getName();
}
@Override
protected InputStream func_110591_a(String resourceName) throws IOException
{
try
{
return super.func_110591_a(resourceName);
}
catch (IOException ioe)
{
if ("pack.mcmeta".equals(resourceName))
{
FMLLog.log(container.getName(), Level.WARNING, "Mod %s is missing a pack.mcmeta file, things may not work well", container.getName());
return new ByteArrayInputStream(("{\n" +
" \"pack\": {\n"+
" \"description\": \"dummy FML pack for "+container.getName()+"\",\n"+
" \"pack_format\": 1\n"+
"}\n" +
"}").getBytes(Charsets.UTF_8));
}
else throw ioe;
}
}
@Override
public BufferedImage func_110586_a() throws IOException
{
return ImageIO.read(func_110591_a(container.getMetadata().logoFile));
}
}
@@ -0,0 +1,62 @@
package cpw.mods.fml.client;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import javax.imageio.ImageIO;
import net.minecraft.client.resources.FolderResourcePack;
import com.google.common.base.Charsets;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.ModContainer;
public class FMLFolderResourcePack extends FolderResourcePack {
private ModContainer container;
public FMLFolderResourcePack(ModContainer container)
{
super(container.getSource());
this.container = container;
}
@Override
public String func_130077_b()
{
return "FMLFileResourcePack:"+container.getName();
}
@Override
protected InputStream func_110591_a(String resourceName) throws IOException
{
try
{
return super.func_110591_a(resourceName);
}
catch (IOException ioe)
{
if ("pack.mcmeta".equals(resourceName))
{
FMLLog.log(container.getName(), Level.WARNING, "Mod %s is missing a pack.mcmeta file, things may not work well", container.getName());
return new ByteArrayInputStream(("{\n" +
" \"pack\": {\n"+
" \"description\": \"dummy FML pack for "+container.getName()+"\",\n"+
" \"pack_format\": 1\n"+
"}\n" +
"}").getBytes(Charsets.UTF_8));
}
else throw ioe;
}
}
@Override
public BufferedImage func_110586_a() throws IOException
{
return ImageIO.read(func_110591_a(container.getMetadata().logoFile));
}
}
+56 -20
View File
@@ -15,15 +15,26 @@
package cpw.mods.fml.client;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiSmallButton;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.DynamicTexture;
import net.minecraft.client.renderer.texture.SimpleTexture;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.renderer.texture.TextureObject;
import net.minecraft.client.resources.I18n;
import net.minecraft.client.resources.ResourcePack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StringTranslate;
import org.lwjgl.opengl.GL11;
@@ -120,28 +131,53 @@ public class GuiModList extends GuiScreen
if (!logoFile.isEmpty())
{
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
// TODO
// this.field_73882_e.field_71446_o.func_98187_b(logoFile);
Dimension dim = TextureFXManager.instance().getTextureDimensions(logoFile);
double scaleX = dim.width / 200.0;
double scaleY = dim.height / 65.0;
double scale = 1.0;
if (scaleX > 1 || scaleY > 1)
TextureManager tm = field_73882_e.func_110434_K();
ResourcePack pack = FMLClientHandler.instance().getResourcePackFor(selectedMod.getModId());
try
{
scale = 1.0 / Math.max(scaleX, scaleY);
}
dim.width *= scale;
dim.height *= scale;
int top = 32;
Tessellator tess = Tessellator.field_78398_a;
tess.func_78382_b();
tess.func_78374_a(offset, top + dim.height, field_73735_i, 0, 1);
tess.func_78374_a(offset + dim.width, top + dim.height, field_73735_i, 1, 1);
tess.func_78374_a(offset + dim.width, top, field_73735_i, 1, 0);
tess.func_78374_a(offset, top, field_73735_i, 0, 0);
tess.func_78381_a();
BufferedImage logo = null;
if (pack!=null)
{
logo = pack.func_110586_a();
}
else
{
InputStream logoResource = getClass().getResourceAsStream(logoFile);
if (logoResource != null)
{
logo = ImageIO.read(logoResource);
}
}
if (logo != null)
{
ResourceLocation rl = tm.func_110578_a("modlogo", new DynamicTexture(logo));
this.field_73882_e.field_71446_o.func_110577_a(rl);
Dimension dim = new Dimension(logo.getWidth(), logo.getHeight());
double scaleX = dim.width / 200.0;
double scaleY = dim.height / 65.0;
double scale = 1.0;
if (scaleX > 1 || scaleY > 1)
{
scale = 1.0 / Math.max(scaleX, scaleY);
}
dim.width *= scale;
dim.height *= scale;
int top = 32;
Tessellator tess = Tessellator.field_78398_a;
tess.func_78382_b();
tess.func_78374_a(offset, top + dim.height, field_73735_i, 0, 1);
tess.func_78374_a(offset + dim.width, top + dim.height, field_73735_i, 1, 1);
tess.func_78374_a(offset + dim.width, top, field_73735_i, 1, 0);
tess.func_78374_a(offset, top, field_73735_i, 0, 0);
tess.func_78381_a();
shifty += 65;
shifty += 65;
}
}
catch (IOException e)
{
;
}
}
this.field_73886_k.func_78261_a(selectedMod.getMetadata().name, offset, shifty, 0xFFFFFF);
shifty += 12;
@@ -5,7 +5,7 @@
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
*
* Contributors:
* cpw - implementation
*/
@@ -172,6 +172,10 @@ public class KeyBindingRegistry
private Set<KeyHandler> keyHandlers = Sets.newLinkedHashSet();
/**
* Deprecated as it should not be used by client code
* @return
*/
@Deprecated
public static KeyBindingRegistry instance()
{
File renamed without changes.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

+1
View File
@@ -448,6 +448,7 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr
return null;
}
@SideOnly(CLIENT)
public void clientCustomPayload(NetClientHandler handler, Packet250CustomPayload packet)
{
+2
View File
@@ -626,6 +626,7 @@ public class ModLoader
*
* @param block
*/
@SuppressWarnings("deprecation")
public static void registerBlock(Block block)
{
GameRegistry.registerBlock(block);
@@ -637,6 +638,7 @@ public class ModLoader
* @param block
* @param itemclass
*/
@SuppressWarnings("deprecation")
public static void registerBlock(Block block, Class<? extends ItemBlock> itemclass)
{
GameRegistry.registerBlock(block, itemclass);
+68 -19
View File
@@ -1,5 +1,16 @@
--- commands.py
+++ commands.py
@@ -126,8 +126,8 @@
def truncate(text, length):
- if len(text) > length:
- return text[:length] + '...'
+ #if len(text) > length:
+ # return text[:length] + '...'
return text
@@ -139,6 +139,8 @@
fieldnames = csvreader.fieldnames
return set(fieldnames)
@@ -9,7 +20,7 @@
class Commands(object):
"""Contains the commands and initialisation for a full mcp run"""
@@ -943,6 +945,8 @@
@@ -950,6 +952,8 @@
binlk = {CLIENT: self.binclient, SERVER: self.binserver}
testlk = {CLIENT: self.testclient, SERVER: self.testserver}
@@ -18,7 +29,7 @@
if not os.path.exists(os.path.join(binlk[side], os.path.normpath(testlk[side] + '.class'))):
return False
return True
@@ -1274,6 +1278,9 @@
@@ -1281,23 +1285,34 @@
pathbinlk = {CLIENT: self.binclient, SERVER: self.binserver}
pathsrclk = {CLIENT: self.srcclient, SERVER: self.srcserver}
pathlog = {CLIENT: self.clientrecomplog, SERVER: self.serverrecomplog}
@@ -28,25 +39,63 @@
if not os.path.exists(pathbinlk[side]):
os.makedirs(pathbinlk[side])
@@ -1331,7 +1338,7 @@
raise
def startserver(self):
# HINT: We create the list of source directories based on the list of packages
# on windows we just pass wildcards, otherwise we pass the full file list
- if self.osname == 'win':
+ if self.osname == 'win' and False == True: #FML: Disable for windows we write to file now
all_files = False
append_pattern = True
else:
all_files = True
append_pattern = False
pkglist = filterdirs(pathsrclk[side], '*.java', append_pattern=append_pattern, all_files=all_files)
+ from tempfile import NamedTemporaryFile
if self.cmdrecompscala: # Compile scala before java as scala scans java files, but not vice-versa
pkglistscala = pkglist[:]
pkglistscala.extend(filterdirs(pathsrclk[side], '*.scala', append_pattern=append_pattern, all_files=all_files))
- dirs = ' '.join(pkglistscala)
+ f = NamedTemporaryFile(mode='wb', suffix='.txt', prefix ='scala_src_path_', delete=False) #FML: We write to a temporary file just in case the command is to long
+ for line in pkglistscala:
+ if os.sep == '\\':
+ f.write('"%s"\n' % os.path.abspath(line).replace(os.sep, os.sep + os.sep))
+ else:
+ f.write('"%s"\n' % os.path.abspath(line))
+ f.close()
+ dirs = '@"%s"' % f.name
classpath = os.pathsep.join(cplk[side])
forkcmd = self.cmdrecompscala.format(classpath=classpath, sourcepath=pathsrclk[side], outpath=pathbinlk[side], pkgs=dirs)
try:
@@ -1317,7 +1332,15 @@
self.logger.error('================================')
self.logger.error('')
raise
- dirs = ' '.join(pkglist)
+ os.unlink(f.name)
+ f = NamedTemporaryFile(mode='wb', suffix='.txt', prefix ='java_src_path_', delete=False) #FML: We write to a temporary file just in case the command is to long
+ for line in pkglist:
+ if os.sep == '\\':
+ f.write('"%s"\n' % os.path.abspath(line).replace('\\', '\\\\'))
+ else:
+ f.write('"%s"\n' % os.path.abspath(line))
+ f.close()
+ dirs = '@"%s"' % f.name
classpath = os.pathsep.join(cplk[side])
forkcmd = self.cmdrecomp.format(classpath=classpath, sourcepath=pathsrclk[side], outpath=pathbinlk[side],
pkgs=dirs)
@@ -1336,9 +1359,10 @@
self.logger.error('==================')
self.logger.error('')
raise
+ os.unlink(f.name)
def startserver(self, mainclass, extraargs):
- classpath = [self.binserver] + self.cpathserver
+ classpath = [self.binclient, self.srcclient] + self.cpathserver
+ classpath = [self.binclient, self.srcclient] + self.cpathserver + self.cpathclient
classpath = [os.path.join('..', p) for p in classpath]
classpath = os.pathsep.join(classpath)
os.chdir(self.dirjars)
@@ -1339,7 +1346,7 @@
self.runmc(forkcmd)
def startclient(self):
- classpath = [self.binclient] + self.cpathclient
+ classpath = [self.binclient, self.srcclient] + self.cpathclient
classpath = [os.path.join('..', p) for p in classpath]
classpath = os.pathsep.join(classpath)
natives = os.path.join('..', self.dirnatives)
@@ -1696,7 +1703,7 @@
@@ -1703,7 +1727,7 @@
self.runcmd(forkcmd)
return True
@@ -55,7 +104,7 @@
if not reobf:
md5lk = {CLIENT: self.md5client, SERVER: self.md5server}
else:
@@ -1711,6 +1718,9 @@
@@ -1718,6 +1742,9 @@
class_path = ''
else:
class_path += '/'
@@ -65,7 +114,7 @@
for class_file in fnmatch.filter(filelist, '*.class'):
class_name = class_path + os.path.splitext(class_file)[0]
bin_file = os.path.normpath(os.path.join(path, class_file))
@@ -1883,6 +1893,9 @@
@@ -1890,6 +1917,9 @@
sys.exit(1)
for entry in newfiles:
@@ -75,7 +124,7 @@
if entry[3] == 'U':
self.logger.info('Retrieving file from server : %s', entry[0])
cur_file = os.path.normpath(entry[0])
@@ -1903,6 +1916,9 @@
@@ -1910,6 +1940,9 @@
md5reoblk = {CLIENT: self.md5reobfclient, SERVER: self.md5reobfserver}
outpathlk = {CLIENT: self.srcmodclient, SERVER: self.srcmodserver}
src = {CLIENT: self.srcclient, SERVER: self.srcserver}
@@ -175,4 +175,9 @@ public class DummyModContainer implements ModContainer
{
return EMPTY_PROPERTIES;
}
@Override
public Class<?> getCustomResourcePackClass()
{
return null;
}
}
@@ -486,4 +486,20 @@ public class FMLCommonHandler
}
return Joiner.on(',').join(modNames);
}
public void addModToResourcePack(ModContainer container)
{
sidedDelegate.addModAsResource(container);
}
public void updateResourcePackList()
{
sidedDelegate.updateResourcePackList();
}
public String getCurrentLanguage()
{
return sidedDelegate.getCurrentLanguage();
}
}
@@ -5,13 +5,14 @@
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
*
* Contributors:
* cpw - implementation
*/
package cpw.mods.fml.common;
import java.io.File;
import java.security.cert.Certificate;
import java.util.Arrays;
import java.util.Map;
@@ -26,6 +27,9 @@ import net.minecraft.world.storage.WorldInfo;
import com.google.common.eventbus.EventBus;
import cpw.mods.fml.client.FMLFileResourcePack;
import cpw.mods.fml.client.FMLFolderResourcePack;
import cpw.mods.fml.common.asm.FMLSanityChecker;
import cpw.mods.fml.common.registry.GameData;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.ItemData;
@@ -123,4 +127,15 @@ public class FMLDummyContainer extends DummyModContainer implements WorldAccessC
Certificate[] certificates = getClass().getProtectionDomain().getCodeSource().getCertificates();
return certificates != null ? certificates[0] : null;
}
@Override
public File getSource()
{
return FMLSanityChecker.fmlLocation;
}
@Override
public Class<?> getCustomResourcePackClass()
{
return getSource().isDirectory() ? FMLFolderResourcePack.class : FMLFileResourcePack.class;
}
}
@@ -89,6 +89,7 @@ public class FMLModContainer implements ModContainer
private DefaultArtifactVersion processedVersion;
private boolean isNetworkMod;
@SuppressWarnings("deprecation")
private static final BiMap<Class<? extends FMLEvent>, Class<? extends Annotation>> modAnnotationTypes = ImmutableBiMap.<Class<? extends FMLEvent>, Class<? extends Annotation>>builder()
.put(FMLPreInitializationEvent.class, Mod.PreInit.class)
.put(FMLInitializationEvent.class, Mod.Init.class)
@@ -342,7 +343,7 @@ public class FMLModContainer implements ModContainer
if (m.getParameterTypes().length == 1 && modAnnotationTypes.containsKey(m.getParameterTypes()[0]))
{
m.setAccessible(true);
eventMethods.put((Class<? extends FMLEvent>) m.getParameterTypes()[1],m);
eventMethods.put((Class<? extends FMLEvent>) m.getParameterTypes()[0],m);
}
else
{
@@ -595,4 +596,17 @@ public class FMLModContainer implements ModContainer
{
return customModProperties;
}
@Override
public Class<?> getCustomResourcePackClass()
{
try
{
return getSource().isDirectory() ? Class.forName("cpw.mods.fml.client.FMLFolderResourcePack", true, getClass().getClassLoader()) : Class.forName("cpw.mods.fml.client.FMLFileResourcePack",true, getClass().getClassLoader());
}
catch (ClassNotFoundException e)
{
return null;
}
}
}
@@ -5,7 +5,7 @@
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
*
* Contributors:
* cpw - implementation
*/
@@ -62,4 +62,10 @@ public interface IFMLSidedHandler
boolean shouldServerShouldBeKilledQuietly();
void disconnectIDMismatch(MapDifference<Integer, ItemData> s, NetHandler toKill, INetworkManager mgr);
void addModAsResource(ModContainer container);
void updateResourcePackList();
String getCurrentLanguage();
}
@@ -30,7 +30,7 @@ public class InjectedModContainer implements ModContainer
public InjectedModContainer(ModContainer mc, File source)
{
this.source = source;
this.source = source != null ? source : new File("minecraft.jar");
this.wrappedContainer = mc;
}
@@ -161,4 +161,10 @@ public class InjectedModContainer implements ModContainer
{
return wrappedContainer.getCustomModProperties();
}
@Override
public Class<?> getCustomResourcePackClass()
{
return wrappedContainer.getCustomResourcePackClass();
}
}
@@ -84,6 +84,7 @@ public class LoadController
activeModList.add(mod);
modStates.put(mod.getModId(), ModState.UNLOADED);
eventBus.put(mod.getModId(), bus);
FMLCommonHandler.instance().addModToResourcePack(mod);
}
else
{
@@ -94,6 +95,7 @@ public class LoadController
}
eventChannels = eventBus.build();
FMLCommonHandler.instance().updateResourcePackList();
}
public void distributeStateMessage(LoaderState state, Object... eventData)
+7 -2
View File
@@ -322,7 +322,6 @@ public class Loader
FMLLog.fine("Building injected Mod Containers %s", injectedContainers);
// Add in the MCP mod container
mods.add(new InjectedModContainer(mcp,new File("minecraft.jar")));
File coremod = new File(minecraftDir,"coremods");
for (String cont : injectedContainers)
{
ModContainer mc;
@@ -335,7 +334,7 @@ public class Loader
FMLLog.log(Level.SEVERE, e, "A problem occured instantiating the injected mod container %s", cont);
throw new LoaderException(e);
}
mods.add(new InjectedModContainer(mc,coremod));
mods.add(new InjectedModContainer(mc,mc.getSource()));
}
ModDiscoverer discoverer = new ModDiscoverer();
FMLLog.fine("Attempting to load mods contained in the minecraft jar file and associated classes");
@@ -344,6 +343,12 @@ public class Loader
FMLLog.info("Searching %s for mods", canonicalModsDir.getAbsolutePath());
discoverer.findModDirMods(canonicalModsDir);
File versionSpecificModsDir = new File(canonicalModsDir,mccversion);
if (versionSpecificModsDir.isDirectory())
{
FMLLog.info("Also searching %s for mods", versionSpecificModsDir);
discoverer.findModDirMods(versionSpecificModsDir);
}
mods.addAll(discoverer.identifyMods());
identifyDuplicates(mods);
+3 -1
View File
@@ -20,6 +20,7 @@ import java.lang.annotation.Target;
import net.minecraft.item.ItemBlock;
import net.minecraft.network.packet.Packet250CustomPayload;
import cpw.mods.fml.common.event.FMLEvent;
import cpw.mods.fml.common.event.FMLFingerprintViolationEvent;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLInterModComms;
@@ -68,6 +69,7 @@ import cpw.mods.fml.common.registry.GameRegistry;
* // Do stuff in pre-init phase (read config, create blocks and items, register them)
* }
* }
* }
* </pre>
*
* @author cpw
@@ -422,7 +424,7 @@ public @interface Mod
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Target(ElementType.METHOD)
public @interface InstanceFactory {
}
}
+16 -2
View File
@@ -20,6 +20,7 @@ import java.net.URLClassLoader;
import java.util.List;
import java.util.logging.Level;
import net.minecraft.launchwrapper.IClassTransformer;
import net.minecraft.launchwrapper.LaunchClassLoader;
import com.google.common.collect.ImmutableList;
@@ -82,8 +83,21 @@ public class ModClassLoader extends URLClassLoader
public Class<? extends BaseModProxy> loadBaseModClass(String modClazzName) throws Exception
{
AccessTransformer transformer = (AccessTransformer)mainClassLoader.getTransformers().get(0);
transformer.ensurePublicAccessFor(modClazzName);
AccessTransformer accessTransformer = null;
for (IClassTransformer transformer : mainClassLoader.getTransformers())
{
if (transformer instanceof AccessTransformer)
{
accessTransformer = (AccessTransformer) transformer;
break;
}
}
if (accessTransformer == null)
{
FMLLog.log(Level.SEVERE, "No access transformer found");
throw new LoaderException();
}
accessTransformer.ensurePublicAccessFor(modClazzName);
return (Class<? extends BaseModProxy>) Class.forName(modClazzName, true, this);
}
}
@@ -136,4 +136,6 @@ public interface ModContainer
public static final Map<String,String> EMPTY_PROPERTIES = ImmutableMap.of();
Map<String,String> getCustomModProperties();
public Class<?> getCustomResourcePackClass();
}
@@ -40,6 +40,7 @@ import java.lang.annotation.Target;
* public class ClientProxy extends CommonProxy {
* // Override common stuff with client specific stuff here
* }
* }
* </pre>
* @author cpw
*
@@ -14,10 +14,13 @@ package cpw.mods.fml.common.asm;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream.GetField;
import java.io.StringReader;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.nio.charset.Charset;
import java.security.CodeSource;
import java.security.cert.CertPath;
@@ -32,6 +35,10 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Locale;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.logging.Level;
import java.util.zip.ZipEntry;
import javax.swing.JOptionPane;
@@ -42,17 +49,22 @@ import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Opcodes;
import com.google.common.base.Charsets;
import com.google.common.io.ByteStreams;
import cpw.mods.fml.common.CertificateHelper;
import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper;
import cpw.mods.fml.common.patcher.ClassPatchManager;
import cpw.mods.fml.relauncher.FMLLaunchHandler;
import cpw.mods.fml.relauncher.FMLRelaunchLog;
import cpw.mods.fml.relauncher.IFMLCallHook;
import cpw.mods.fml.relauncher.Side;
public class FMLSanityChecker implements IFMLCallHook
{
private static final String FMLFINGERPRINT = "AE:F6:54:79:96:E9:1B:D1:59:70:6C:B4:6B:F5:4A:89:C5:CE:08:1D".toLowerCase().replace(":","");
private static final String FORGEFINGERPRINT = "DE:4C:F8:A3:F3:BC:15:63:58:10:04:4C:39:24:0B:F9:68:04:EA:7D".toLowerCase().replace(":", "");
private static final String FMLFINGERPRINT = "51:0A:FB:4C:AF:A4:A0:F2:F5:CF:C5:0E:B4:CC:3C:30:24:4A:E3:8E".toLowerCase().replace(":", "");
private static final String FORGEFINGERPRINT = "E3:C3:D5:0C:7C:98:6D:F7:4C:64:5C:0A:C5:46:39:74:1C:90:A5:57".toLowerCase().replace(":", "");
private static final String MCFINGERPRINT = "CD:99:95:96:56:F7:53:DC:28:D8:63:B4:67:69:F7:F8:FB:AE:FC:FC".toLowerCase().replace(":", "");
static class MLDetectorClassVisitor extends ClassVisitor
{
private boolean foundMarker = false;
@@ -73,14 +85,17 @@ public class FMLSanityChecker implements IFMLCallHook
}
private LaunchClassLoader cl;
public static File fmlLocation;
@Override
public Void call() throws Exception
{
CodeSource codeSource = getClass().getProtectionDomain().getCodeSource();
boolean goodFML = false;
boolean fmlIsJar = false;
if (codeSource.getLocation().getProtocol().equals("jar"))
{
fmlIsJar = true;
Certificate[] certificates = codeSource.getCertificates();
if (certificates!=null)
{
@@ -109,6 +124,88 @@ public class FMLSanityChecker implements IFMLCallHook
{
goodFML = true;
}
boolean goodMC = FMLLaunchHandler.side() == Side.SERVER; //Server is not signed, so assume it's good.
int certCount = 0;
try
{
Class cbr = Class.forName("net.minecraft.client.ClientBrandRetriever",false, cl);
codeSource = cbr.getProtectionDomain().getCodeSource();
}
catch (Exception e)
{
// Probably a development environment, or the server (the server is not signed)
goodMC = true;
}
JarFile mcJarFile = null;
if (fmlIsJar && !goodMC && codeSource.getLocation().getProtocol().equals("jar"))
{
try
{
String mcPath = codeSource.getLocation().getPath().substring(5);
mcPath = mcPath.substring(0, mcPath.lastIndexOf('!'));
mcPath = URLDecoder.decode(mcPath, Charsets.UTF_8.name());
mcJarFile = new JarFile(mcPath,true);
mcJarFile.getManifest();
JarEntry cbrEntry = mcJarFile.getJarEntry("net/minecraft/client/ClientBrandRetriever.class");
ByteStreams.toByteArray(mcJarFile.getInputStream(cbrEntry));
Certificate[] certificates = cbrEntry.getCertificates();
certCount = certificates != null ? certificates.length : 0;
if (certificates!=null)
{
for (Certificate cert : certificates)
{
String fingerprint = CertificateHelper.getFingerprint(cert);
if (fingerprint.equals(MCFINGERPRINT))
{
FMLRelaunchLog.info("Found valid fingerprint for Minecraft. Certificate fingerprint %s", fingerprint);
goodMC = true;
}
}
}
}
catch (Throwable e)
{
FMLRelaunchLog.log(Level.SEVERE, e, "A critical error occurred trying to read the minecraft jar file");
}
finally
{
if (mcJarFile != null)
{
try
{
mcJarFile.close();
}
catch (IOException ioe)
{
// Noise
}
}
}
}
else
{
goodMC = true;
}
if (!goodMC)
{
FMLRelaunchLog.severe("The minecraft jar %s appears to be corrupt! There has been CRITICAL TAMPERING WITH MINECRAFT, it is highly unlikely minecraft will work! STOP NOW, get a clean copy and try again!",codeSource.getLocation().getFile());
if (!Boolean.parseBoolean(System.getProperty("fml.ignoreInvalidMinecraftCertificates","false")))
{
FMLRelaunchLog.severe("For your safety, FML will not launch minecraft. You will need to fetch a clean version of the minecraft jar file");
FMLRelaunchLog.severe("Technical information: The class net.minecraft.client.ClientBrandRetriever should have been associated with the minecraft jar file, " +
"and should have returned us a valid, intact minecraft jar location. This did not work. Either you have modified the minecraft jar file (if so " +
"run the forge installer again), or you are using a base editing jar that is changing this class (and likely others too). If you REALLY " +
"want to run minecraft in this configuration, add the flag -Dfml.ignoreInvalidMinecraftCertificates=true to the 'JVM settings' in your launcher profile.");
System.exit(1);
}
else
{
FMLRelaunchLog.severe("FML has been ordered to ignore the invalid or missing minecraft certificate. This is very likely to cause a problem!");
FMLRelaunchLog.severe("Technical information: ClientBrandRetriever was at %s, there were %d certificates for it", codeSource.getLocation(), certCount);
}
}
if (!goodFML)
{
FMLRelaunchLog.severe("FML appears to be missing any signature data. This is not a good thing");
@@ -143,8 +240,8 @@ public class FMLSanityChecker implements IFMLCallHook
{
cl = (LaunchClassLoader) data.get("classLoader");
File mcDir = (File)data.get("mcLocation");
fmlLocation = (File)data.get("coremodLocation");
FMLDeobfuscatingRemapper.INSTANCE.setup(mcDir, cl, (String) data.get("deobfuscationFileName"));
File binpatches = new File(mcDir,"binpatch");
ClassPatchManager.INSTANCE.setup(FMLLaunchHandler.side());
}
@@ -157,7 +157,6 @@ public class AccessTransformer implements IClassTransformer
System.out.printf("Loaded %d rules from AccessTransformer config file %s\n", modifiers.size(), rulesFile);
}
@SuppressWarnings("unchecked")
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
@@ -212,7 +211,7 @@ public class AccessTransformer implements IClassTransformer
}
if (m.desc.isEmpty())
{
for (FieldNode n : (List<FieldNode>) classNode.fields)
for (FieldNode n : classNode.fields)
{
if (n.name.equals(m.name) || m.name.equals("*"))
{
@@ -231,7 +230,7 @@ public class AccessTransformer implements IClassTransformer
}
else
{
for (MethodNode n : (List<MethodNode>) classNode.methods)
for (MethodNode n : classNode.methods)
{
if ((n.name.equals(m.name) && n.desc.equals(m.desc)) || m.name.equals("*"))
{
@@ -334,11 +334,10 @@ public class MCPMerger
return ann;
}
@SuppressWarnings("unchecked")
private static Hashtable<String, ZipEntry> getClassEntries(ZipFile inFile, ZipOutputStream outFile) throws IOException
{
Hashtable<String, ZipEntry> ret = new Hashtable<String, ZipEntry>();
for (ZipEntry entry : Collections.list((Enumeration<ZipEntry>)inFile.entries()))
for (ZipEntry entry : Collections.list(inFile.entries()))
{
if (entry.isDirectory())
{
@@ -423,7 +422,6 @@ public class MCPMerger
return classNode;
}
@SuppressWarnings("unchecked")
private static void processFields(ClassNode cClass, ClassNode sClass, ClassInfo info)
{
List<FieldNode> cFields = cClass.fields;
@@ -537,7 +535,6 @@ public class MCPMerger
return Objects.toStringHelper(this).add("name", node.name).add("desc",node.desc).add("server",server).add("client",client).toString();
}
}
@SuppressWarnings("unchecked")
private static void processMethods(ClassNode cClass, ClassNode sClass, ClassInfo info)
{
List<MethodNode> cMethods = (List<MethodNode>)cClass.methods;
@@ -97,7 +97,6 @@ public class MarkerTransformer implements IClassTransformer
});
}
@SuppressWarnings("unchecked")
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
@@ -32,7 +32,6 @@ public class SideTransformer implements IClassTransformer
{
private static String SIDE = FMLLaunchHandler.side().name();
private static final boolean DEBUG = false;
@SuppressWarnings("unchecked")
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
@@ -5,7 +5,7 @@
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
*
* Contributors:
* cpw - implementation
*/
@@ -14,10 +14,10 @@ package cpw.mods.fml.common.discovery;
import java.util.Collections;
import java.util.List;
import java.util.jar.JarFile;
import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import com.google.common.collect.Lists;
@@ -35,11 +35,16 @@ public class JarDiscoverer implements ITypeDiscoverer
{
List<ModContainer> foundMods = Lists.newArrayList();
FMLLog.fine("Examining file %s for potential mods", candidate.getModContainer().getName());
ZipFile jar = null;
JarFile jar = null;
try
{
jar = new ZipFile(candidate.getModContainer());
jar = new JarFile(candidate.getModContainer());
if (jar.getManifest()!=null && (jar.getManifest().getMainAttributes().get("FMLCorePlugin") != null || jar.getManifest().getMainAttributes().get("TweakClass") != null))
{
FMLLog.finest("Ignoring coremod or tweak system %s", candidate.getModContainer());
return foundMods;
}
ZipEntry modInfo = jar.getEntry("mcmod.info");
MetadataCollection mc = null;
if (modInfo != null)
@@ -5,7 +5,7 @@
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
*
* Contributors:
* cpw - implementation
*/
@@ -41,7 +41,14 @@ public class ModDiscoverer
public void findClasspathMods(ModClassLoader modClassLoader)
{
List<String> knownLibraries = ImmutableList.<String>builder().addAll(modClassLoader.getDefaultLibraries()).addAll(CoreModManager.getLibraries()).build();
List<String> knownLibraries = ImmutableList.<String>builder()
// skip default libs
.addAll(modClassLoader.getDefaultLibraries())
// skip loaded coremods
.addAll(CoreModManager.getLoadedCoremods())
// skip reparse coremods here
.addAll(CoreModManager.getReparseableCoremods())
.build();
File[] minecraftSources = modClassLoader.getParentSources();
if (minecraftSources.length == 1 && minecraftSources[0].isFile())
{
@@ -82,7 +89,12 @@ public class ModDiscoverer
for (File modFile : modList)
{
if (modFile.isDirectory())
// skip loaded coremods
if (CoreModManager.getLoadedCoremods().contains(modFile.getName()))
{
FMLLog.finer("Skipping already parsed coremod or tweaker %s", modFile.getName());
}
else if (modFile.isDirectory())
{
FMLLog.fine("Found a candidate mod directory %s", modFile.getName());
candidates.add(new ModCandidate(modFile, modFile, ContainerType.DIR));
@@ -13,6 +13,11 @@ public class FMLServerTweaker extends FMLTweaker {
@Override
public void injectIntoClassLoader(LaunchClassLoader classLoader)
{
classLoader.addTransformerExclusion("cpw.mods.fml.repackage.");
classLoader.addTransformerExclusion("cpw.mods.fml.relauncher.");
classLoader.addTransformerExclusion("cpw.mods.fml.common.asm.transformers.");
classLoader.addClassLoaderExclusion("LZMA.");
FMLLaunchHandler.configureForServerLaunch(classLoader, this);
FMLLaunchHandler.appendCoreMods();
}
}
@@ -3,16 +3,26 @@ package cpw.mods.fml.common.launcher;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import joptsimple.ArgumentAcceptingOptionSpec;
import joptsimple.NonOptionArgumentSpec;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import com.google.common.base.Joiner;
import com.google.common.base.Throwables;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.ObjectArrays;
import cpw.mods.fml.relauncher.FMLLaunchHandler;
import net.minecraft.launchwrapper.ITweaker;
import net.minecraft.launchwrapper.Launch;
import net.minecraft.launchwrapper.LaunchClassLoader;
public class FMLTweaker implements ITweaker {
@@ -21,15 +31,14 @@ public class FMLTweaker implements ITweaker {
private File assetsDir;
private String profile;
private static URI jarLocation;
private String[] array;
@Override
public void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile)
{
this.args = args;
this.gameDir = (gameDir == null ? new File(".") : gameDir);
this.assetsDir = assetsDir;
this.profile = profile;
this.args = args;
try
{
jarLocation = getClass().getProtectionDomain().getCodeSource().getLocation().toURI();
@@ -49,6 +58,7 @@ public class FMLTweaker implements ITweaker {
classLoader.addTransformerExclusion("cpw.mods.fml.common.asm.transformers.");
classLoader.addClassLoaderExclusion("LZMA.");
FMLLaunchHandler.configureForClientLaunch(classLoader, this);
FMLLaunchHandler.appendCoreMods();
}
@Override
@@ -60,30 +70,27 @@ public class FMLTweaker implements ITweaker {
@Override
public String[] getLaunchArguments()
{
String[] array = args.toArray(new String[args.size()]);
List<String> blackboardArgs = (List<String>) Launch.blackboard.get("ArgumentList");
if (gameDir != null)
String[] launchArgsArray = args.toArray(new String[args.size()]);
if (gameDir != null && !blackboardArgs.contains("--gameDir"))
{
array = ObjectArrays.concat(gameDir.getAbsolutePath(),array);
array = ObjectArrays.concat("--gameDir",array);
launchArgsArray = ObjectArrays.concat(gameDir.getAbsolutePath(),launchArgsArray);
launchArgsArray = ObjectArrays.concat("--gameDir",launchArgsArray);
}
if (assetsDir != null)
if (assetsDir != null && !blackboardArgs.contains("--assetsDir"))
{
array = ObjectArrays.concat(assetsDir.getAbsolutePath(),array);
array = ObjectArrays.concat("--assetsDir",array);
launchArgsArray = ObjectArrays.concat(assetsDir.getAbsolutePath(),launchArgsArray);
launchArgsArray = ObjectArrays.concat("--assetsDir",launchArgsArray);
}
if (profile != null)
if (!blackboardArgs.contains("--version"))
{
array = ObjectArrays.concat(profile,array);
array = ObjectArrays.concat("--version",array);
launchArgsArray = ObjectArrays.concat(profile != null ? profile : "UnknownFMLProfile",launchArgsArray);
launchArgsArray = ObjectArrays.concat("--version",launchArgsArray);
}
else
{
array = ObjectArrays.concat("UnknownFMLProfile",array);
array = ObjectArrays.concat("--version",array);
}
return array;
return launchArgsArray;
}
public File getGameDir()
@@ -96,4 +103,10 @@ public class FMLTweaker implements ITweaker {
return jarLocation;
}
public void injectCascadingTweak(String tweakClassName)
{
List<String> tweakClasses = (List<String>) Launch.blackboard.get("TweakClasses");
tweakClasses.add(tweakClassName);
}
}
@@ -28,7 +28,7 @@ public class ModLoaderFuelHelper implements IFuelHandler
@Override
public int getBurnTime(ItemStack fuel)
{
return mod.addFuel(fuel.field_77993_c, fuel.field_77993_c);
return mod.addFuel(fuel.field_77993_c, fuel.func_77960_j());
}
}
@@ -621,4 +621,10 @@ public class ModLoaderModContainer implements ModContainer
{
return EMPTY_PROPERTIES;
}
@Override
public Class<?> getCustomResourcePackClass()
{
return null;
}
}
@@ -6,12 +6,14 @@ public class ClassPatch {
public final String targetClassName;
public final boolean existsAtTarget;
public final byte[] patch;
public ClassPatch(String name, String sourceClassName, String targetClassName, boolean existsAtTarget, byte[] patch)
public final int inputChecksum;
public ClassPatch(String name, String sourceClassName, String targetClassName, boolean existsAtTarget, int inputChecksum, byte[] patch)
{
this.name = name;
this.sourceClassName = sourceClassName;
this.targetClassName = targetClassName;
this.existsAtTarget = existsAtTarget;
this.inputChecksum = inputChecksum;
this.patch = patch;
}
@@ -26,11 +26,11 @@ import com.google.common.base.Strings;
import com.google.common.base.Throwables;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.hash.Hashing;
import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteStreams;
import com.google.common.io.Files;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.launcher.FMLTweaker;
import cpw.mods.fml.relauncher.FMLRelaunchLog;
import cpw.mods.fml.relauncher.Side;
@@ -39,11 +39,19 @@ import cpw.mods.fml.repackage.com.nothome.delta.GDiffPatcher;
public class ClassPatchManager {
public static final ClassPatchManager INSTANCE = new ClassPatchManager();
public static final boolean dumpPatched = Boolean.parseBoolean(System.getProperty("fml.dumpPatchedClasses", "false"));
private GDiffPatcher patcher = new GDiffPatcher();
private ListMultimap<String, ClassPatch> patches;
private File tempDir;
private ClassPatchManager()
{
if (dumpPatched)
{
tempDir = Files.createTempDir();
FMLRelaunchLog.info("Dumping patched classes to %s",tempDir.getAbsolutePath());
}
}
public byte[] applyPatch(String name, String mappedName, byte[] inputData)
@@ -57,11 +65,13 @@ public class ClassPatchManager {
{
return inputData;
}
boolean ignoredError = false;
FMLRelaunchLog.fine("Runtime patching class %s (input size %d), found %d patch%s", mappedName, (inputData == null ? 0 : inputData.length), list.size(), list.size()!=1 ? "es" : "");
for (ClassPatch patch: list)
{
if (!patch.targetClassName.equals(mappedName))
{
FMLLog.warning("Binary patch found %s for wrong class %s", patch.targetClassName, mappedName);
FMLRelaunchLog.warning("Binary patch found %s for wrong class %s", patch.targetClassName, mappedName);
}
if (!patch.existsAtTarget && (inputData == null || inputData.length == 0))
{
@@ -69,7 +79,26 @@ public class ClassPatchManager {
}
else if (!patch.existsAtTarget)
{
FMLLog.warning("Patcher expecting empty class data file for %s, but received non-empty", patch.targetClassName);
FMLRelaunchLog.warning("Patcher expecting empty class data file for %s, but received non-empty", patch.targetClassName);
}
else
{
int inputChecksum = Hashing.adler32().hashBytes(inputData).asInt();
if (patch.inputChecksum != inputChecksum)
{
FMLRelaunchLog.severe("There is a binary discrepency between the expected input class %s (%s) and the actual class. Checksum on disk is %x, in patch %x. Things are probably about to go very wrong. Did you put something into the jar file?", mappedName, name, inputChecksum, patch.inputChecksum);
if (!Boolean.parseBoolean(System.getProperty("fml.ignorePatchDiscrepancies","false")))
{
FMLRelaunchLog.severe("The game is going to exit, because this is a critical error, and it is very improbable that the modded game will work, please obtain clean jar files.");
System.exit(1);
}
else
{
FMLRelaunchLog.severe("FML is going to ignore this error, note that the patch will not be applied, and there is likely to be a malfunctioning behaviour, including not running at all");
ignoredError = true;
continue;
}
}
}
synchronized (patcher)
{
@@ -79,12 +108,26 @@ public class ClassPatchManager {
}
catch (IOException e)
{
FMLLog.log(Level.SEVERE, e, "Encountered problem runtime patching class %s", name);
FMLRelaunchLog.log(Level.SEVERE, e, "Encountered problem runtime patching class %s", name);
continue;
}
}
}
FMLLog.fine("Successfully applied runtime patches for %s", mappedName);
if (!ignoredError)
{
FMLRelaunchLog.fine("Successfully applied runtime patches for %s (new size %d)", mappedName, inputData.length);
}
if (dumpPatched)
{
try
{
Files.write(inputData, new File(tempDir,mappedName));
}
catch (IOException e)
{
FMLRelaunchLog.log(Level.SEVERE, e, "Failed to write %s to %s", mappedName, tempDir.getAbsolutePath());
}
}
return inputData;
}
@@ -97,7 +140,7 @@ public class ClassPatchManager {
InputStream binpatchesCompressed = getClass().getResourceAsStream("/binpatches.pack.lzma");
if (binpatchesCompressed==null)
{
FMLRelaunchLog.log(Level.SEVERE, "The binary patch set is missing. Things are probably about to go very wrong.");
FMLRelaunchLog.log(Level.SEVERE, "The binary patch set is missing. Either you are in a development environment, or things are not going to work!");
return;
}
LzmaInputStream binpatchesDecompressed = new LzmaInputStream(binpatchesCompressed);
@@ -108,7 +151,7 @@ public class ClassPatchManager {
}
catch (Exception e)
{
FMLRelaunchLog.log(Level.SEVERE, e, "Error occurred reading binary patches. Problems may occur");
FMLRelaunchLog.log(Level.SEVERE, e, "Error occurred reading binary patches. Expect severe problems!");
throw Throwables.propagate(e);
}
@@ -140,13 +183,13 @@ public class ClassPatchManager {
{
}
} while (true);
FMLLog.fine("Read %d binary patches", patches.size());
FMLLog.fine("Patch list :\n\t%s", Joiner.on("\t\n").join(patches.asMap().entrySet()));
FMLRelaunchLog.fine("Read %d binary patches", patches.size());
FMLRelaunchLog.fine("Patch list :\n\t%s", Joiner.on("\t\n").join(patches.asMap().entrySet()));
}
private ClassPatch readPatch(JarEntry patchEntry, JarInputStream jis)
{
FMLLog.finest("Reading patch data from %s", patchEntry.getName());
FMLRelaunchLog.finest("Reading patch data from %s", patchEntry.getName());
ByteArrayDataInput input;
try
{
@@ -154,17 +197,22 @@ public class ClassPatchManager {
}
catch (IOException e)
{
FMLLog.log(Level.WARNING, e, "Unable to read binpatch file %s - ignoring", patchEntry.getName());
FMLRelaunchLog.log(Level.WARNING, e, "Unable to read binpatch file %s - ignoring", patchEntry.getName());
return null;
}
String name = input.readUTF();
String sourceClassName = input.readUTF();
String targetClassName = input.readUTF();
boolean exists = input.readBoolean();
int inputChecksum = 0;
if (exists)
{
inputChecksum = input.readInt();
}
int patchLength = input.readInt();
byte[] patchBytes = new byte[patchLength];
input.readFully(patchBytes);
return new ClassPatch(name, sourceClassName, targetClassName, exists, patchBytes);
return new ClassPatch(name, sourceClassName, targetClassName, exists, inputChecksum, patchBytes);
}
}
@@ -13,6 +13,7 @@ import java.util.logging.Logger;
import com.google.common.collect.Iterables;
import com.google.common.collect.Iterators;
import com.google.common.hash.Hashing;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.google.common.io.Files;
@@ -64,6 +65,7 @@ public class GenDiffSet {
byte[] diff = delta.compute(vanillaBytes, patchedBytes);
ByteArrayDataOutput diffOut = ByteStreams.newDataOutput(diff.length + 50);
// Original name
diffOut.writeUTF(name);
@@ -73,6 +75,10 @@ public class GenDiffSet {
diffOut.writeUTF(targetClassName);
// exists at original
diffOut.writeBoolean(entry != null);
if (entry != null)
{
diffOut.writeInt(Hashing.adler32().hashBytes(vanillaBytes).asInt());
}
// length of patch
diffOut.writeInt(diff.length);
// patch
@@ -52,6 +52,7 @@ import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.LoaderState;
import cpw.mods.fml.common.ModContainer;
import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier;
public class GameData {
private static Map<Integer, ItemData> idMap = Maps.newHashMap();
@@ -362,4 +363,28 @@ public class GameData {
}
}
}
static UniqueIdentifier getUniqueName(Block block)
{
if (block == null) return null;
ItemData itemData = idMap.get(block.field_71990_ca);
if (itemData == null || !itemData.isOveridden() || customItemStacks.contains(itemData.getModId(), itemData.getItemType()))
{
return null;
}
return new UniqueIdentifier(itemData.getModId(), itemData.getItemType());
}
static UniqueIdentifier getUniqueName(Item item)
{
if (item == null) return null;
ItemData itemData = idMap.get(item.field_77779_bT);
if (itemData == null || !itemData.isOveridden() || customItemStacks.contains(itemData.getModId(), itemData.getItemType()))
{
return null;
}
return new UniqueIdentifier(itemData.getModId(), itemData.getItemType());
}
}
@@ -95,10 +95,11 @@ public class GameRegistry
Random fmlRandom = new Random(worldSeed);
long xSeed = fmlRandom.nextLong() >> 2 + 1L;
long zSeed = fmlRandom.nextLong() >> 2 + 1L;
fmlRandom.setSeed((xSeed * chunkX + zSeed * chunkZ) ^ worldSeed);
long chunkSeed = (xSeed * chunkX + zSeed * chunkZ) ^ worldSeed;
for (IWorldGenerator generator : worldGenerators)
{
fmlRandom.setSeed(chunkSeed);
generator.generate(fmlRandom, chunkX, chunkZ, world, chunkGenerator, chunkProvider);
}
}
@@ -350,26 +351,55 @@ public class GameRegistry
public static void onPlayerLogin(EntityPlayer player)
{
for(IPlayerTracker tracker : playerTrackers)
tracker.onPlayerLogin(player);
for (IPlayerTracker tracker : playerTrackers)
try
{
tracker.onPlayerLogin(player);
}
catch (Exception e)
{
FMLLog.log(Level.SEVERE, e, "A critical error occured handling the onPlayerLogin event with player tracker %s", tracker.getClass().getName());
}
}
public static void onPlayerLogout(EntityPlayer player)
{
for(IPlayerTracker tracker : playerTrackers)
tracker.onPlayerLogout(player);
for (IPlayerTracker tracker : playerTrackers)
try
{
tracker.onPlayerLogout(player);
}
catch (Exception e)
{
FMLLog.log(Level.SEVERE, e, "A critical error occured handling the onPlayerLogout event with player tracker %s", tracker.getClass().getName());
}
}
public static void onPlayerChangedDimension(EntityPlayer player)
{
for(IPlayerTracker tracker : playerTrackers)
tracker.onPlayerChangedDimension(player);
for (IPlayerTracker tracker : playerTrackers)
try
{
tracker.onPlayerChangedDimension(player);
}
catch (Exception e)
{
FMLLog.log(Level.SEVERE, e, "A critical error occured handling the onPlayerChangedDimension event with player tracker %s", tracker.getClass()
.getName());
}
}
public static void onPlayerRespawn(EntityPlayer player)
{
for(IPlayerTracker tracker : playerTrackers)
tracker.onPlayerRespawn(player);
for (IPlayerTracker tracker : playerTrackers)
try
{
tracker.onPlayerRespawn(player);
}
catch (Exception e)
{
FMLLog.log(Level.SEVERE, e, "A critical error occured handling the onPlayerRespawn event with player tracker %s", tracker.getClass().getName());
}
}
@@ -430,4 +460,46 @@ public class GameRegistry
}
return null;
}
public static class UniqueIdentifier
{
public final String modId;
public final String name;
UniqueIdentifier(String modId, String name)
{
this.modId = modId;
this.name = name;
}
}
/**
* Look up the mod identifier data for a block.
* Returns null if there is no mod specified mod identifier data, or it is part of a
* custom itemstack definition {@link #registerCustomItemStack}
*
* Note: uniqueness and persistence is only guaranteed by mods using the game registry
* correctly.
*
* @param block to lookup
* @return a {@link UniqueIdentifier} for the block or null
*/
public static UniqueIdentifier findUniqueIdentifierFor(net.minecraft.block.Block block)
{
return GameData.getUniqueName(block);
}
/**
* Look up the mod identifier data for an item.
* Returns null if there is no mod specified mod identifier data, or it is part of a
* custom itemstack definition {@link #registerCustomItemStack}
*
* Note: uniqueness and persistence is only guaranteed by mods using the game registry
* correctly.
*
* @param item to lookup
* @return a {@link UniqueIdentifier} for the item or null
*/
public static UniqueIdentifier findUniqueIdentifierFor(net.minecraft.item.Item item)
{
return GameData.getUniqueName(item);
}
}
@@ -23,6 +23,7 @@ import java.util.logging.Level;
import com.google.common.base.Charsets;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ModContainer;
@@ -46,7 +47,7 @@ public class LanguageRegistry
public String getStringLocalization(String key)
{
return getStringLocalization(key, Minecraft.func_71410_x().func_135016_M().func_135041_c().func_135034_a());
return getStringLocalization(key, FMLCommonHandler.instance().getCurrentLanguage());
}
public String getStringLocalization(String key, String lang)
@@ -13,15 +13,15 @@
package cpw.mods.fml.common.registry;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Collection;
import java.util.Collections;
import net.minecraft.client.resources.ResourceLocation;
import net.minecraft.entity.passive.EntityVillager;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.Tuple;
import net.minecraft.village.MerchantRecipeList;
import net.minecraft.world.gen.structure.ComponentVillageStartPiece;
@@ -173,7 +173,7 @@ public class VillagerRegistry
@SideOnly(Side.CLIENT)
public static ResourceLocation getVillagerSkin(int villagerType, ResourceLocation defaultSkin)
{
if (instance().newVillagers.containsKey(villagerType))
if (instance().newVillagers != null && instance().newVillagers.containsKey(villagerType))
{
return instance().newVillagers.get(villagerType);
}
@@ -1,38 +0,0 @@
/*
* Forge Mod Loader
* Copyright (c) 2012-2013 cpw.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* cpw - implementation
*/
package cpw.mods.fml.relauncher;
public class CoreFMLLibraries implements ILibrarySet
{
private static String[] libraries = { "argo-small-3.2.jar","guava-14.0-rc3.jar","asm-all-4.1.jar", "bcprov-jdk15on-148.jar", FMLInjectionData.debfuscationDataName(), "scala-library.jar" };
private static String[] checksums = { "58912ea2858d168c50781f956fa5b59f0f7c6b51", "931ae21fa8014c3ce686aaa621eae565fefb1a6a", "054986e962b88d8660ae4566475658469595ef58", "960dea7c9181ba0b17e8bab0c06a43f0a5f04e65", FMLInjectionData.deobfuscationDataHash, "458d046151ad179c85429ed7420ffb1eaf6ddf85" };
@Override
public String[] getLibraries()
{
return libraries;
}
@Override
public String[] getHashes()
{
return checksums;
}
@Override
public String getRootURL()
{
return System.getProperty("fml.core.libraries.mirror", "http://files.minecraftforge.net/fmllibs/%s");
}
}
+285 -451
View File
@@ -13,21 +13,10 @@
package cpw.mods.fml.relauncher;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -37,23 +26,61 @@ import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.logging.Level;
import net.minecraft.launchwrapper.ITweaker;
import net.minecraft.launchwrapper.LaunchClassLoader;
import cpw.mods.fml.common.CertificateHelper;
import com.google.common.base.Strings;
import com.google.common.base.Throwables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.ObjectArrays;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.launcher.FMLTweaker;
import cpw.mods.fml.common.toposort.TopologicalSort;
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.DependsOn;
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion;
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.Name;
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions;
public class CoreModManager
{
private static final Attributes.Name COREMODCONTAINSFMLMOD = new Attributes.Name("FMLCorePluginContainsFMLMod");
private static String[] rootPlugins = { "cpw.mods.fml.relauncher.FMLCorePlugin" , "net.minecraftforge.classloading.FMLForgePlugin" };
private static List<String> loadedLibraries = new ArrayList<String>();
private static Map<IFMLLoadingPlugin, File> pluginLocations;
private static List<IFMLLoadingPlugin> loadPlugins;
private static List<ILibrarySet> libraries;
private static List<String> loadedCoremods = Lists.newArrayList();
private static List<FMLPluginWrapper> loadPlugins;
private static boolean deobfuscatedEnvironment;
private static FMLTweaker tweaker;
private static File mcDir;
private static List<String> reparsedCoremods = Lists.newArrayList();
public static void handleLaunch(File mcDir, LaunchClassLoader classLoader)
private static class FMLPluginWrapper
{
public final String name;
public final IFMLLoadingPlugin coreModInstance;
public final List<String> predepends;
public final File location;
public FMLPluginWrapper(String name, IFMLLoadingPlugin coreModInstance, File location, String... predepends)
{
super();
this.name = name;
this.coreModInstance = coreModInstance;
this.location = location;
this.predepends = Lists.newArrayList(predepends);
}
@Override
public String toString()
{
return String.format("%s {%s}", this.name, this.predepends);
}
}
public static void handleLaunch(File mcDir, LaunchClassLoader classLoader, FMLTweaker tweaker)
{
CoreModManager.mcDir = mcDir;
CoreModManager.tweaker = tweaker;
try
{
// Are we in a 'decompiled' environment?
@@ -72,20 +99,21 @@ public class CoreModManager
{
FMLRelaunchLog.fine("Enabling runtime deobfuscation");
}
pluginLocations = new HashMap<IFMLLoadingPlugin, File>();
loadPlugins = new ArrayList<IFMLLoadingPlugin>();
for (String s : rootPlugins)
try
{
try
{
FMLRelaunchLog.finest("Adding coremod for loading %s", s);
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) Class.forName(s, true, classLoader).newInstance();
loadPlugins.add(plugin);
}
catch (Exception e)
{
// HMMM
}
classLoader.registerTransformer("cpw.mods.fml.common.asm.transformers.PatchingTransformer");
}
catch (Exception e)
{
FMLRelaunchLog.log(Level.SEVERE, e, "The patch transformer failed to load! This is critical, loading cannot continue!");
throw Throwables.propagate(e);
}
loadPlugins = new ArrayList<FMLPluginWrapper>();
for (String rootPluginName : rootPlugins)
{
loadCoreMod(classLoader, rootPluginName, new File(FMLTweaker.getJarLocation()));
}
if (loadPlugins.isEmpty())
@@ -93,249 +121,25 @@ public class CoreModManager
throw new RuntimeException("A fatal error has occured - no valid fml load plugin was found - this is a completely corrupt FML installation.");
}
downloadMonitor.updateProgressString("All core mods are successfully located");
FMLRelaunchLog.fine("All fundamental core mods are successfully located");
// Now that we have the root plugins loaded - lets see what else might be around
String commandLineCoremods = System.getProperty("fml.coreMods.load","");
for (String s : commandLineCoremods.split(","))
for (String coreModClassName : commandLineCoremods.split(","))
{
if (s.isEmpty())
if (coreModClassName.isEmpty())
{
continue;
}
FMLRelaunchLog.info("Found a command line coremod : %s", s);
try
{
classLoader.addTransformerExclusion(s);
Class<?> coreModClass = Class.forName(s, true, classLoader);
TransformerExclusions trExclusions = coreModClass.getAnnotation(IFMLLoadingPlugin.TransformerExclusions.class);
if (trExclusions!=null)
{
for (String st : trExclusions.value())
{
classLoader.addTransformerExclusion(st);
}
}
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) coreModClass.newInstance();
loadPlugins.add(plugin);
if (plugin.getLibraryRequestClass()!=null)
{
for (String libName : plugin.getLibraryRequestClass())
{
libraries.add((ILibrarySet) Class.forName(libName, true, classLoader).newInstance());
}
}
}
catch (Throwable e)
{
FMLRelaunchLog.log(Level.SEVERE,e,"Exception occured trying to load coremod %s",s);
throw new RuntimeException(e);
}
FMLRelaunchLog.info("Found a command line coremod : %s", coreModClassName);
loadCoreMod(classLoader, coreModClassName, null);
}
discoverCoreMods(mcDir, classLoader, loadPlugins, libraries);
discoverCoreMods(mcDir, classLoader);
List<Throwable> caughtErrors = new ArrayList<Throwable>();
try
{
File libDir;
try
{
libDir = setupLibDir(mcDir);
}
catch (Exception e)
{
caughtErrors.add(e);
return;
}
libraries = new ArrayList<ILibrarySet>();
for (ILibrarySet lib : libraries)
{
for (int i=0; i<lib.getLibraries().length; i++)
{
boolean download = false;
String libName = lib.getLibraries()[i];
String targFileName = libName.lastIndexOf('/')>=0 ? libName.substring(libName.lastIndexOf('/')) : libName;
String checksum = lib.getHashes()[i];
File libFile = new File(libDir, targFileName);
if (!libFile.exists())
{
try
{
downloadFile(libFile, lib.getRootURL(), libName, checksum);
download = true;
}
catch (Throwable e)
{
caughtErrors.add(e);
continue;
}
}
if (libFile.exists() && !libFile.isFile())
{
caughtErrors.add(new RuntimeException(String.format("Found a file %s that is not a normal file - you should clear this out of the way", libName)));
continue;
}
if (!download)
{
try
{
FileInputStream fis = new FileInputStream(libFile);
FileChannel chan = fis.getChannel();
MappedByteBuffer mappedFile = chan.map(MapMode.READ_ONLY, 0, libFile.length());
String fileChecksum = generateChecksum(mappedFile);
fis.close();
// bad checksum and I did not download this file
if (!checksum.equals(fileChecksum))
{
caughtErrors.add(new RuntimeException(String.format("The file %s was found in your lib directory and has an invalid checksum %s (expecting %s) - it is unlikely to be the correct download, please move it out of the way and try again.", libName, fileChecksum, checksum)));
continue;
}
}
catch (Exception e)
{
FMLRelaunchLog.log(Level.SEVERE, e, "The library file %s could not be validated", libFile.getName());
caughtErrors.add(new RuntimeException(String.format("The library file %s could not be validated", libFile.getName()),e));
continue;
}
}
if (!download)
{
downloadMonitor.updateProgressString("Found library file %s present and correct in lib dir", libName);
}
else
{
downloadMonitor.updateProgressString("Library file %s was downloaded and verified successfully", libName);
}
try
{
classLoader.addURL(libFile.toURI().toURL());
loadedLibraries.add(libName);
}
catch (MalformedURLException e)
{
caughtErrors.add(new RuntimeException(String.format("Should never happen - %s is broken - probably a somehow corrupted download. Delete it and try again.", libFile.getName()), e));
}
}
}
}
finally
{
if (downloadMonitor.shouldStopIt())
{
return;
}
if (!caughtErrors.isEmpty())
{
FMLRelaunchLog.severe("There were errors during initial FML setup. " +
"Some files failed to download or were otherwise corrupted. " +
"You will need to manually obtain the following files from " +
"these download links and ensure your lib directory is clean. ");
for (ILibrarySet set : libraries)
{
for (String file : set.getLibraries())
{
FMLRelaunchLog.severe("*** Download "+set.getRootURL(), file);
}
}
FMLRelaunchLog.severe("<===========>");
FMLRelaunchLog.severe("The following is the errors that caused the setup to fail. " +
"They may help you diagnose and resolve the issue");
for (Throwable t : caughtErrors)
{
if (t.getMessage()!=null)
{
FMLRelaunchLog.severe(t.getMessage());
}
}
FMLRelaunchLog.severe("<<< ==== >>>");
FMLRelaunchLog.severe("The following is diagnostic information for developers to review.");
for (Throwable t : caughtErrors)
{
FMLRelaunchLog.log(Level.SEVERE, t, "Error details");
}
throw new RuntimeException("A fatal error occured and FML cannot continue");
}
}
for (IFMLLoadingPlugin plug : loadPlugins)
{
if (plug.getASMTransformerClass()!=null)
{
for (String xformClass : plug.getASMTransformerClass())
{
FMLRelaunchLog.finest("Registering transformer %s", xformClass);
classLoader.registerTransformer(xformClass);
}
}
}
// Deobfuscation transformer, always last
if (!deobfuscatedEnvironment)
{
classLoader.registerTransformer("cpw.mods.fml.common.asm.transformers.DeobfuscationTransformer");
}
downloadMonitor.updateProgressString("Running coremod plugins");
Map<String,Object> data = new HashMap<String,Object>();
data.put("mcLocation", mcDir);
data.put("coremodList", loadPlugins);
data.put("runtimeDeobfuscationEnabled", !deobfuscatedEnvironment);
for (IFMLLoadingPlugin plugin : loadPlugins)
{
downloadMonitor.updateProgressString("Running coremod plugin %s", plugin.getClass().getSimpleName());
data.put("coremodLocation", pluginLocations.get(plugin));
plugin.injectData(data);
String setupClass = plugin.getSetupClass();
if (setupClass != null)
{
try
{
IFMLCallHook call = (IFMLCallHook) Class.forName(setupClass, true, classLoader).newInstance();
Map<String,Object> callData = new HashMap<String, Object>();
callData.put("mcLocation", mcDir);
callData.put("classLoader", classLoader);
callData.put("coremodLocation", pluginLocations.get(plugin));
callData.put("deobfuscationFileName", FMLInjectionData.debfuscationDataName());
call.injectData(callData);
call.call();
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
downloadMonitor.updateProgressString("Coremod plugin %s run successfully", plugin.getClass().getSimpleName());
String modContainer = plugin.getModContainerClass();
if (modContainer != null)
{
FMLInjectionData.containers.add(modContainer);
}
}
try
{
downloadMonitor.updateProgressString("Validating minecraft");
Class<?> loaderClazz = Class.forName("cpw.mods.fml.common.Loader", true, classLoader);
Method m = loaderClazz.getMethod("injectData", Object[].class);
m.invoke(null, (Object)FMLInjectionData.data());
m = loaderClazz.getMethod("instance");
m.invoke(null);
downloadMonitor.updateProgressString("Minecraft validated, launching...");
downloadBuffer = null;
}
catch (Exception e)
{
// Load in the Loader, make sure he's ready to roll - this will initialize most of the rest of minecraft here
System.out.println("A CRITICAL PROBLEM OCCURED INITIALIZING MINECRAFT - LIKELY YOU HAVE AN INCORRECT VERSION FOR THIS FML");
throw new RuntimeException(e);
}
}
private static void discoverCoreMods(File mcDir, LaunchClassLoader classLoader, List<IFMLLoadingPlugin> loadPlugins, List<ILibrarySet> libraries)
private static void discoverCoreMods(File mcDir, LaunchClassLoader classLoader)
{
downloadMonitor.updateProgressString("Discovering coremods");
FMLRelaunchLog.fine("Discovering coremods");
File coreMods = setupCoreModDir(mcDir);
FilenameFilter ff = new FilenameFilter()
{
@@ -346,149 +150,100 @@ public class CoreModManager
}
};
File[] coreModList = coreMods.listFiles(ff);
File versionedModDir = new File(coreMods,FMLInjectionData.mccversion);
if (versionedModDir.isDirectory())
{
File[] versionedCoreMods = versionedModDir.listFiles(ff);
coreModList = ObjectArrays.concat(coreModList,versionedCoreMods, File.class);
}
Arrays.sort(coreModList);
for (File coreMod : coreModList)
{
downloadMonitor.updateProgressString("Found a candidate coremod %s", coreMod.getName());
JarFile jar;
FMLRelaunchLog.fine("Examining for coremod candidacy %s", coreMod.getName());
JarFile jar = null;
Attributes mfAttributes;
try
{
jar = new JarFile(coreMod);
if (jar.getManifest() == null)
{
FMLRelaunchLog.warning("Found an un-manifested jar file in the coremods folder : %s, it will be ignored.", coreMod.getName());
// Not a coremod
continue;
}
mfAttributes = jar.getManifest().getMainAttributes();
}
catch (IOException ioe)
{
FMLRelaunchLog.log(Level.SEVERE, ioe, "Unable to read the coremod jar file %s - ignoring", coreMod.getName());
FMLRelaunchLog.log(Level.SEVERE, ioe, "Unable to read the jar file %s - ignoring", coreMod.getName());
continue;
}
finally
{
if (jar!=null)
{
try
{
jar.close();
}
catch (IOException e)
{
// Noise
}
}
}
String cascadedTweaker = mfAttributes.getValue("TweakClass");
if (cascadedTweaker != null)
{
FMLRelaunchLog.info("Loading tweaker %s from %s", cascadedTweaker, coreMod.getName());
handleCascadingTweak(coreMod, jar, cascadedTweaker, classLoader);
loadedCoremods.add(coreMod.getName());
continue;
}
String fmlCorePlugin = mfAttributes.getValue("FMLCorePlugin");
if (fmlCorePlugin == null)
{
FMLRelaunchLog.severe("The coremod %s does not contain a valid jar manifest- it will be ignored", coreMod.getName());
// Not a coremod
FMLRelaunchLog.fine("Not found coremod data in %s", coreMod.getName());
continue;
}
// String className = fmlCorePlugin.replace('.', '/').concat(".class");
// JarEntry ent = jar.getJarEntry(className);
// if (ent ==null)
// {
// FMLLog.severe("The coremod %s specified %s as it's loading class but it does not include it - it will be ignored", coreMod.getName(), fmlCorePlugin);
// continue;
// }
// try
// {
// Class<?> coreModClass = Class.forName(fmlCorePlugin, false, classLoader);
// FMLLog.severe("The coremods %s specified a class %s that is already present in the classpath - it will be ignored", coreMod.getName(), fmlCorePlugin);
// continue;
// }
// catch (ClassNotFoundException cnfe)
// {
// // didn't find it, good
// }
try
{
classLoader.addURL(coreMod.toURI().toURL());
if (!mfAttributes.containsKey(COREMODCONTAINSFMLMOD))
{
FMLRelaunchLog.finest("Adding %s to the list of known coremods, it will not be examined again", coreMod.getName());
loadedCoremods.add(coreMod.getName());
}
else
{
FMLRelaunchLog.finest("Found FMLCorePluginContainsFMLMod marker in %s, it will be examined later for regular @Mod instances", coreMod.getName());
reparsedCoremods.add(coreMod.getName());
}
}
catch (MalformedURLException e)
{
FMLRelaunchLog.log(Level.SEVERE, e, "Unable to convert file into a URL. weird");
continue;
}
try
{
downloadMonitor.updateProgressString("Loading coremod %s", coreMod.getName());
classLoader.addTransformerExclusion(fmlCorePlugin);
Class<?> coreModClass = Class.forName(fmlCorePlugin, true, classLoader);
MCVersion requiredMCVersion = coreModClass.getAnnotation(IFMLLoadingPlugin.MCVersion.class);
String version = "";
if (requiredMCVersion == null)
{
FMLRelaunchLog.log(Level.WARNING, "The coremod %s does not have a MCVersion annotation, it may cause issues with this version of Minecraft", fmlCorePlugin);
}
else
{
version = requiredMCVersion.value();
}
if (!"".equals(version) && !FMLInjectionData.mccversion.equals(version))
{
FMLRelaunchLog.log(Level.SEVERE, "The coremod %s is requesting minecraft version %s and minecraft is %s. It will be ignored.", fmlCorePlugin, version, FMLInjectionData.mccversion);
continue;
}
else if (!"".equals(version))
{
FMLRelaunchLog.log(Level.FINE, "The coremod %s requested minecraft version %s and minecraft is %s. It will be loaded.", fmlCorePlugin, version, FMLInjectionData.mccversion);
}
TransformerExclusions trExclusions = coreModClass.getAnnotation(IFMLLoadingPlugin.TransformerExclusions.class);
if (trExclusions!=null)
{
for (String st : trExclusions.value())
{
classLoader.addTransformerExclusion(st);
}
}
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) coreModClass.newInstance();
loadPlugins.add(plugin);
pluginLocations .put(plugin, coreMod);
if (plugin.getLibraryRequestClass()!=null)
{
for (String libName : plugin.getLibraryRequestClass())
{
libraries.add((ILibrarySet) Class.forName(libName, true, classLoader).newInstance());
}
}
downloadMonitor.updateProgressString("Loaded coremod %s", coreMod.getName());
}
catch (ClassNotFoundException cnfe)
{
FMLRelaunchLog.log(Level.SEVERE, cnfe, "Coremod %s: Unable to class load the plugin %s", coreMod.getName(), fmlCorePlugin);
}
catch (ClassCastException cce)
{
FMLRelaunchLog.log(Level.SEVERE, cce, "Coremod %s: The plugin %s is not an implementor of IFMLLoadingPlugin", coreMod.getName(), fmlCorePlugin);
}
catch (InstantiationException ie)
{
FMLRelaunchLog.log(Level.SEVERE, ie, "Coremod %s: The plugin class %s was not instantiable", coreMod.getName(), fmlCorePlugin);
}
catch (IllegalAccessException iae)
{
FMLRelaunchLog.log(Level.SEVERE, iae, "Coremod %s: The plugin class %s was not accessible", coreMod.getName(), fmlCorePlugin);
}
loadCoreMod(classLoader, fmlCorePlugin, coreMod);
}
}
/**
* @param mcDir the minecraft home directory
* @return the lib directory
*/
private static File setupLibDir(File mcDir)
private static void handleCascadingTweak(File coreMod, JarFile jar, String cascadedTweaker, LaunchClassLoader classLoader)
{
File libDir = new File(mcDir,"lib");
try
{
libDir = libDir.getCanonicalFile();
classLoader.addURL(coreMod.toURI().toURL());
CoreModManager.tweaker.injectCascadingTweak(cascadedTweaker);
}
catch (IOException e)
catch (Exception e)
{
throw new RuntimeException(String.format("Unable to canonicalize the lib dir at %s", mcDir.getName()),e);
FMLRelaunchLog.log(Level.INFO, e, "There was a problem trying to load the mod dir tweaker %s", coreMod.getAbsolutePath());
}
if (!libDir.exists())
{
libDir.mkdir();
}
else if (libDir.exists() && !libDir.isDirectory())
{
throw new RuntimeException(String.format("Found a lib file in %s that's not a directory", mcDir.getName()));
}
return libDir;
}
/**
@@ -497,7 +252,7 @@ public class CoreModManager
*/
private static File setupCoreModDir(File mcDir)
{
File coreModDir = new File(mcDir,"coremods");
File coreModDir = new File(mcDir,"mods");
try
{
coreModDir = coreModDir.getCanonicalFile();
@@ -517,114 +272,193 @@ public class CoreModManager
return coreModDir;
}
private static void downloadFile(File libFile, String rootUrl,String realFilePath, String hash)
public static List<String> getLoadedCoremods()
{
return loadedCoremods;
}
public static List<String> getReparseableCoremods()
{
return reparsedCoremods;
}
private static FMLPluginWrapper loadCoreMod(LaunchClassLoader classLoader, String coreModClass, File location)
{
String coreModName = coreModClass.substring(coreModClass.lastIndexOf('.')+1);
try
{
URL libDownload = new URL(String.format(rootUrl,realFilePath));
downloadMonitor.updateProgressString("Downloading file %s", libDownload.toString());
FMLRelaunchLog.info("Downloading file %s", libDownload.toString());
URLConnection connection = libDownload.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setRequestProperty("User-Agent", "FML Relaunch Downloader");
int sizeGuess = connection.getContentLength();
performDownload(connection.getInputStream(), sizeGuess, hash, libFile);
downloadMonitor.updateProgressString("Download complete");
FMLRelaunchLog.info("Download complete");
}
catch (Exception e)
{
if (downloadMonitor.shouldStopIt())
FMLRelaunchLog.fine("Instantiating coremod class %s", coreModName);
classLoader.addTransformerExclusion(coreModClass);
Class<?> coreModClazz = Class.forName(coreModClass, true, classLoader);
Name coreModNameAnn = coreModClazz.getAnnotation(IFMLLoadingPlugin.Name.class);
if (coreModNameAnn!=null && !Strings.isNullOrEmpty(coreModNameAnn.value()))
{
FMLRelaunchLog.warning("You have stopped the downloading operation before it could complete");
return;
coreModName = coreModNameAnn.value();
FMLRelaunchLog.finest("coremod named %s is loading", coreModName);
}
if (e instanceof RuntimeException) throw (RuntimeException)e;
FMLRelaunchLog.severe("There was a problem downloading the file %s automatically. Perhaps you " +
"have an environment without internet access. You will need to download " +
"the file manually or restart and let it try again\n", libFile.getName());
libFile.delete();
throw new RuntimeException("A download error occured", e);
}
}
public static List<String> getLibraries()
{
return loadedLibraries;
}
private static ByteBuffer downloadBuffer = ByteBuffer.allocateDirect(1 << 23);
static IDownloadDisplay downloadMonitor;
private static void performDownload(InputStream is, int sizeGuess, String validationHash, File target)
{
if (sizeGuess > downloadBuffer.capacity())
{
throw new RuntimeException(String.format("The file %s is too large to be downloaded by FML - the coremod is invalid", target.getName()));
}
downloadBuffer.clear();
int bytesRead, fullLength = 0;
downloadMonitor.resetProgress(sizeGuess);
try
{
downloadMonitor.setPokeThread(Thread.currentThread());
byte[] smallBuffer = new byte[1024];
while ((bytesRead = is.read(smallBuffer)) >= 0) {
downloadBuffer.put(smallBuffer, 0, bytesRead);
fullLength += bytesRead;
if (downloadMonitor.shouldStopIt())
MCVersion requiredMCVersion = coreModClazz.getAnnotation(IFMLLoadingPlugin.MCVersion.class);
if (!Arrays.asList(rootPlugins).contains(coreModClass) && (requiredMCVersion == null || Strings.isNullOrEmpty(requiredMCVersion.value())))
{
FMLRelaunchLog.log(Level.WARNING, "The coremod %s does not have a MCVersion annotation, it may cause issues with this version of Minecraft", coreModClass);
}
else if (requiredMCVersion!=null && !FMLInjectionData.mccversion.equals(requiredMCVersion.value()))
{
FMLRelaunchLog.log(Level.SEVERE, "The coremod %s is requesting minecraft version %s and minecraft is %s. It will be ignored.", coreModClass, requiredMCVersion.value(), FMLInjectionData.mccversion);
return null;
}
else if (requiredMCVersion!=null)
{
FMLRelaunchLog.log(Level.FINE, "The coremod %s requested minecraft version %s and minecraft is %s. It will be loaded.", coreModClass, requiredMCVersion.value(), FMLInjectionData.mccversion);
}
TransformerExclusions trExclusions = coreModClazz.getAnnotation(IFMLLoadingPlugin.TransformerExclusions.class);
if (trExclusions!=null)
{
for (String st : trExclusions.value())
{
break;
classLoader.addTransformerExclusion(st);
}
downloadMonitor.updateProgress(fullLength);
}
is.close();
downloadMonitor.setPokeThread(null);
downloadBuffer.limit(fullLength);
downloadBuffer.position(0);
DependsOn deplist = coreModClazz.getAnnotation(IFMLLoadingPlugin.DependsOn.class);
String[] dependencies = new String[0];
if (deplist != null)
{
dependencies = deplist.value();
}
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) coreModClazz.newInstance();
FMLPluginWrapper wrap = new FMLPluginWrapper(coreModName, plugin, location, dependencies);
loadPlugins.add(wrap);
FMLRelaunchLog.fine("Loaded coremod %s", coreModName);
return wrap;
}
catch (InterruptedIOException e)
catch (ClassNotFoundException cnfe)
{
// We were interrupted by the stop button. We're stopping now.. clear interruption flag.
Thread.interrupted();
return;
if (!Lists.newArrayList(rootPlugins).contains(coreModClass))
FMLRelaunchLog.log(Level.SEVERE, cnfe, "Coremod %s: Unable to class load the plugin %s", coreModName, coreModClass);
else
FMLRelaunchLog.fine("Skipping root plugin %s", coreModClass);
}
catch (IOException e)
catch (ClassCastException cce)
{
throw new RuntimeException(e);
FMLRelaunchLog.log(Level.SEVERE, cce, "Coremod %s: The plugin %s is not an implementor of IFMLLoadingPlugin", coreModName, coreModClass);
}
catch (InstantiationException ie)
{
FMLRelaunchLog.log(Level.SEVERE, ie, "Coremod %s: The plugin class %s was not instantiable", coreModName, coreModClass);
}
catch (IllegalAccessException iae)
{
FMLRelaunchLog.log(Level.SEVERE, iae, "Coremod %s: The plugin class %s was not accessible", coreModName, coreModClass);
}
return null;
}
private static void sortCoreMods()
{
TopologicalSort.DirectedGraph<FMLPluginWrapper> sortGraph = new TopologicalSort.DirectedGraph<FMLPluginWrapper>();
Map<String, FMLPluginWrapper> pluginMap = Maps.newHashMap();
for (FMLPluginWrapper plug : loadPlugins)
{
sortGraph.addNode(plug);
pluginMap.put(plug.name, plug);
}
for (FMLPluginWrapper plug : loadPlugins)
{
for (String dep : plug.predepends)
{
if (!pluginMap.containsKey(dep))
{
FMLRelaunchLog.log(Level.SEVERE, "Missing coremod dependency - the coremod %s depends on coremod %s which isn't present.", plug.name, dep);
throw new RuntimeException();
}
sortGraph.addEdge(plug, pluginMap.get(dep));
}
}
try
{
String cksum = generateChecksum(downloadBuffer);
if (cksum.equals(validationHash))
{
downloadBuffer.position(0);
FileOutputStream fos = new FileOutputStream(target);
fos.getChannel().write(downloadBuffer);
fos.close();
}
else
{
throw new RuntimeException(String.format("The downloaded file %s has an invalid checksum %s (expecting %s). The download did not succeed correctly and the file has been deleted. Please try launching again.", target.getName(), cksum, validationHash));
}
loadPlugins = TopologicalSort.topologicalSort(sortGraph);
FMLRelaunchLog.fine("Sorted coremod list %s", loadPlugins);
}
catch (Exception e)
{
if (e instanceof RuntimeException) throw (RuntimeException)e;
FMLLog.log(Level.SEVERE, e, "There was a problem performing the coremod sort");
throw Throwables.propagate(e);
}
}
public static void injectTransformers(LaunchClassLoader classLoader)
{
for (FMLPluginWrapper wrap : loadPlugins)
{
IFMLLoadingPlugin plug = wrap.coreModInstance;
if (plug.getASMTransformerClass()!=null)
{
for (String xformClass : plug.getASMTransformerClass())
{
FMLRelaunchLog.finest("Registering transformer %s", xformClass);
classLoader.registerTransformer(xformClass);
}
}
}
FMLRelaunchLog.fine("Running coremod plugins");
Map<String,Object> data = new HashMap<String,Object>();
data.put("mcLocation", mcDir);
data.put("coremodList", loadPlugins);
data.put("runtimeDeobfuscationEnabled", !deobfuscatedEnvironment);
for (FMLPluginWrapper pluginWrapper : loadPlugins)
{
IFMLLoadingPlugin plugin = pluginWrapper.coreModInstance;
FMLRelaunchLog.fine("Running coremod plugin %s", pluginWrapper.name);
data.put("coremodLocation", pluginWrapper.location);
plugin.injectData(data);
String setupClass = plugin.getSetupClass();
if (setupClass != null)
{
try
{
IFMLCallHook call = (IFMLCallHook) Class.forName(setupClass, true, classLoader).newInstance();
Map<String,Object> callData = new HashMap<String, Object>();
callData.put("mcLocation", mcDir);
callData.put("classLoader", classLoader);
callData.put("coremodLocation", pluginWrapper.location);
callData.put("deobfuscationFileName", FMLInjectionData.debfuscationDataName());
call.injectData(callData);
call.call();
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
FMLRelaunchLog.fine("Coremod plugin %s run successfully", plugin.getClass().getSimpleName());
String modContainer = plugin.getModContainerClass();
if (modContainer != null)
{
FMLInjectionData.containers.add(modContainer);
}
}
// Deobfuscation transformer, always last
if (!deobfuscatedEnvironment)
{
classLoader.registerTransformer("cpw.mods.fml.common.asm.transformers.DeobfuscationTransformer");
}
try
{
FMLRelaunchLog.fine("Validating minecraft");
Class<?> loaderClazz = Class.forName("cpw.mods.fml.common.Loader", true, classLoader);
Method m = loaderClazz.getMethod("injectData", Object[].class);
m.invoke(null, (Object)FMLInjectionData.data());
m = loaderClazz.getMethod("instance");
m.invoke(null);
FMLRelaunchLog.fine("Minecraft validated, launching...");
}
catch (Exception e)
{
// Load in the Loader, make sure he's ready to roll - this will initialize most of the rest of minecraft here
System.out.println("A CRITICAL PROBLEM OCCURED INITIALIZING MINECRAFT - LIKELY YOU HAVE AN INCORRECT VERSION FOR THIS FML");
throw new RuntimeException(e);
}
}
private static String generateChecksum(ByteBuffer buffer)
{
return CertificateHelper.getFingerprint(buffer);
}
}
@@ -1,152 +0,0 @@
/*
* Forge Mod Loader
* Copyright (c) 2012-2013 cpw.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* cpw - implementation
*/
package cpw.mods.fml.relauncher;
import java.awt.Dialog.ModalityType;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.Box;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import cpw.mods.fml.common.FMLLog;
public class Downloader extends JOptionPane implements IDownloadDisplay
{
private JDialog container;
private JLabel currentActivity;
private JProgressBar progress;
boolean stopIt;
Thread pokeThread;
private Box makeProgressPanel()
{
Box box = Box.createVerticalBox();
box.add(Box.createRigidArea(new Dimension(0,10)));
JLabel welcomeLabel = new JLabel("<html><b><font size='+1'>FML is setting up your minecraft environment</font></b></html>");
box.add(welcomeLabel);
welcomeLabel.setAlignmentY(LEFT_ALIGNMENT);
welcomeLabel = new JLabel("<html>Please wait, FML has some tasks to do before you can play</html>");
welcomeLabel.setAlignmentY(LEFT_ALIGNMENT);
box.add(welcomeLabel);
box.add(Box.createRigidArea(new Dimension(0,10)));
currentActivity = new JLabel("Currently doing ...");
box.add(currentActivity);
box.add(Box.createRigidArea(new Dimension(0,10)));
progress = new JProgressBar(0, 100);
progress.setStringPainted(true);
box.add(progress);
box.add(Box.createRigidArea(new Dimension(0,30)));
return box;
}
public JDialog makeDialog()
{
setMessageType(JOptionPane.INFORMATION_MESSAGE);
setMessage(makeProgressPanel());
setOptions(new Object[] { "Stop" });
addPropertyChangeListener(new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent evt)
{
if (evt.getSource() == Downloader.this && evt.getPropertyName()==VALUE_PROPERTY)
{
requestClose("This will stop minecraft from launching\nAre you sure you want to do this?");
}
}
});
container = new JDialog(null, "Hello", ModalityType.MODELESS);
container.setResizable(false);
container.setLocationRelativeTo(null);
container.add(this);
this.updateUI();
container.pack();
container.setMinimumSize(container.getPreferredSize());
container.setVisible(true);
container.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
container.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
requestClose("Closing this window will stop minecraft from launching\nAre you sure you wish to do this?");
}
});
return container;
}
protected void requestClose(String message)
{
int shouldClose = JOptionPane.showConfirmDialog(container, message, "Are you sure you want to stop?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (shouldClose == JOptionPane.YES_OPTION)
{
container.dispose();
}
stopIt = true;
if (pokeThread != null)
{
pokeThread.interrupt();
}
}
public void updateProgressString(String progressUpdate, Object... data)
{
FMLLog.finest(progressUpdate, data);
if (currentActivity!=null)
{
currentActivity.setText(String.format(progressUpdate,data));
}
}
public void resetProgress(int sizeGuess)
{
if (progress!=null)
{
progress.getModel().setRangeProperties(0, 0, 0, sizeGuess, false);
}
}
public void updateProgress(int fullLength)
{
if (progress!=null)
{
progress.getModel().setValue(fullLength);
}
}
public void makeHeadless()
{
container = null;
progress = null;
currentActivity = null;
}
@Override
public void setPokeThread(Thread currentThread)
{
this.pokeThread = currentThread;
}
@Override
public boolean shouldStopIt()
{
return stopIt;
}
}
@@ -1,68 +0,0 @@
/*
* Forge Mod Loader
* Copyright (c) 2012-2013 cpw.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* cpw - implementation
*/
package cpw.mods.fml.relauncher;
import java.util.logging.Level;
public class DummyDownloader implements IDownloadDisplay
{
@Override
public void resetProgress(int sizeGuess)
{
// TODO Auto-generated method stub
}
@Override
public void setPokeThread(Thread currentThread)
{
// TODO Auto-generated method stub
}
@Override
public void updateProgress(int fullLength)
{
// TODO Auto-generated method stub
}
@Override
public boolean shouldStopIt()
{
// TODO Auto-generated method stub
return false;
}
@Override
public void updateProgressString(String string, Object... data)
{
FMLRelaunchLog.log(Level.FINE, string, data);
}
@Override
public Object makeDialog()
{
// TODO Auto-generated method stub
return null;
}
@Override
public void makeHeadless()
{
// TODO Auto-generated method stub
}
}
@@ -16,17 +16,17 @@ import java.util.Map;
public class FMLCorePlugin implements IFMLLoadingPlugin
{
@SuppressWarnings("deprecation")
@Override
public String[] getLibraryRequestClass()
{
return new String[] {"cpw.mods.fml.relauncher.CoreFMLLibraries"};
return null;
}
@Override
public String[] getASMTransformerClass()
{
return new String[] {
"cpw.mods.fml.common.asm.transformers.PatchingTransformer",
"cpw.mods.fml.common.asm.transformers.AccessTransformer",
"cpw.mods.fml.common.asm.transformers.MarkerTransformer",
"cpw.mods.fml.common.asm.transformers.SideTransformer",
@@ -12,21 +12,15 @@
package cpw.mods.fml.relauncher;
import java.applet.Applet;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URLClassLoader;
import java.util.logging.Level;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import net.minecraft.launchwrapper.LaunchClassLoader;
import com.google.common.base.Throwables;
import cpw.mods.fml.common.launcher.FMLTweaker;
import net.minecraft.launchwrapper.LaunchClassLoader;
public class FMLLaunchHandler
{
private static FMLLaunchHandler INSTANCE;
@@ -66,15 +60,8 @@ public class FMLLaunchHandler
this.classLoader.addTransformerExclusion("cpw.mods.fml.common.patcher.");
}
private void showWindow(boolean showIt)
{
if (CoreModManager.downloadMonitor != null) { return; }
CoreModManager.downloadMonitor = new DummyDownloader();
}
private void setupClient()
{
showWindow(true);
FMLRelaunchLog.logFileNamePattern = "ForgeModLoader-client-%g.log";
side = Side.CLIENT;
setupHome();
@@ -82,7 +69,6 @@ public class FMLLaunchHandler
private void setupServer()
{
showWindow(false);
FMLRelaunchLog.logFileNamePattern = "ForgeModLoader-server-%g.log";
side = Side.SERVER;
setupHome();
@@ -101,7 +87,7 @@ public class FMLLaunchHandler
try
{
CoreModManager.handleLaunch(minecraftHome, classLoader);
CoreModManager.handleLaunch(minecraftHome, classLoader, tweaker);
}
catch (Throwable t)
{
@@ -115,4 +101,15 @@ public class FMLLaunchHandler
{
return side;
}
private void injectPostfixTransformers()
{
CoreModManager.injectTransformers(classLoader);
}
public static void appendCoreMods()
{
INSTANCE.injectPostfixTransformers();
}
}
@@ -1,34 +0,0 @@
/*
* Forge Mod Loader
* Copyright (c) 2012-2013 cpw.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* cpw - implementation
*/
package cpw.mods.fml.relauncher;
import javax.swing.JDialog;
public interface IDownloadDisplay
{
void resetProgress(int sizeGuess);
void setPokeThread(Thread currentThread);
void updateProgress(int fullLength);
boolean shouldStopIt();
void updateProgressString(String string, Object ... data);
Object makeDialog();
void makeHeadless();
}
@@ -102,4 +102,24 @@ public interface IFMLLoadingPlugin
{
public String value() default "";
}
/**
* Name this coremod something other than the "short class name"
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Name
{
public String value() default "";
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface DependsOn
{
public String[] value() default {};
}
}
@@ -5,7 +5,7 @@
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
*
* Contributors:
* cpw - implementation
*/
@@ -15,10 +15,12 @@ package cpw.mods.fml.relauncher;
/**
* Interface for certain core plugins to register libraries to
* be loaded in by the FML class loader at launch time
* Deprecated without replacement.
*
* @author cpw
*
*/
@Deprecated
public interface ILibrarySet
{
/**
@@ -1,12 +1,10 @@
package cpw.mods.fml.relauncher;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URLClassLoader;
import java.util.logging.Level;
import net.minecraft.launchwrapper.Launch;
import net.minecraft.launchwrapper.LaunchClassLoader;
import com.google.common.base.Throwables;
public class ServerLaunchWrapper {
@@ -26,7 +24,35 @@ public class ServerLaunchWrapper {
private void run(String[] args)
{
Launch.main(args);
Class<?> launchwrapper = null;
try
{
launchwrapper = Class.forName("net.minecraft.launchwrapper.Launch",true,getClass().getClassLoader());
Class.forName("org.objectweb.asm.Type",true,getClass().getClassLoader());
}
catch (Exception e)
{
System.err.printf("We appear to be missing one or more essential library files.\n" +
"You will need to add them to your server before FML and Forge will run successfully.");
e.printStackTrace(System.err);
System.exit(1);
}
try
{
Method main = launchwrapper.getMethod("main", String[].class);
String[] allArgs = new String[args.length + 2];
allArgs[0] = "--tweakClass";
allArgs[1] = "cpw.mods.fml.common.launcher.FMLServerTweaker";
System.arraycopy(args, 0, allArgs, 2, args.length);
main.invoke(null,(Object)allArgs);
}
catch (Exception e)
{
System.err.printf("A problem occurred running the Server launcher.");
e.printStackTrace(System.err);
System.exit(1);
}
}
}
+11 -1
View File
@@ -13,7 +13,17 @@
package cpw.mods.fml.relauncher;
public enum Side {
CLIENT, SERVER;
/**
* The client side. Specifically, an environment where rendering capability exists.
* Usually in the game client.
*/
CLIENT,
/**
* The server side. Specifically, an environment where NO rendering capability exists.
* Usually on the dedicated server.
*/
SERVER;
/**
* @return If this is the server environment
@@ -62,12 +62,12 @@ import java.nio.channels.ReadableByteChannel;
* Newer versions may eventually support paging in/out of checksums.
*/
public class Delta {
/**
* Debug flag.
*/
final static boolean debug = false;
/**
* Default size of 16.
* For "Lorem ipsum" text files (see the tests) the ideal size is about 14.
@@ -76,16 +76,16 @@ public class Delta {
* Use a size like 64 or 128 for large files.
*/
public static final int DEFAULT_CHUNK_SIZE = 1<<4;
/**
* Chunk Size.
*/
private int S;
private SourceState source;
private TargetState target;
private DiffWriter output;
/**
* Constructs a new Delta.
* In the future, additional constructor arguments will set the algorithm details.
@@ -93,12 +93,12 @@ public class Delta {
public Delta() {
setChunkSize(DEFAULT_CHUNK_SIZE);
}
/**
* Sets the chunk size used.
* Larger chunks are faster and use less memory, but create larger patches
* as well.
*
*
* @param size
*/
public void setChunkSize(int size) {
@@ -106,17 +106,17 @@ public class Delta {
throw new IllegalArgumentException("Invalid size");
S = size;
}
/**
* Compares the source bytes with target bytes, writing to output.
*/
public void compute(byte source[], byte target[], OutputStream output)
throws IOException {
compute(new ByteBufferSeekableSource(source),
compute(new ByteBufferSeekableSource(source),
new ByteArrayInputStream(target),
new GDiffWriter(output));
}
/**
* Compares the source bytes with target bytes, returning output.
*/
@@ -126,20 +126,20 @@ public class Delta {
compute(source, target, os);
return os.toByteArray();
}
/**
* Compares the source bytes with target input, writing to output.
*/
public void compute(byte[] sourceBytes, InputStream inputStream,
DiffWriter diffWriter) throws IOException
{
compute(new ByteBufferSeekableSource(sourceBytes),
compute(new ByteBufferSeekableSource(sourceBytes),
inputStream, diffWriter);
}
/**
* Compares the source file with a target file, writing to output.
*
*
* @param output will be closed
*/
public void compute(File sourceFile, File targetFile, DiffWriter output)
@@ -153,25 +153,25 @@ public class Delta {
is.close();
}
}
/**
* Compares the source with a target, writing to output.
*
*
* @param output will be closed
*/
public void compute(SeekableSource seekSource, InputStream targetIS, DiffWriter output)
throws IOException {
if (debug) {
debug("using match length S = " + S);
}
source = new SourceState(seekSource);
target = new TargetState(targetIS);
this.output = output;
if (debug)
debug("checksums " + source.checksum);
while (!target.eof()) {
debug("!target.eof()");
int index = target.find(source);
@@ -196,7 +196,7 @@ public class Delta {
}
output.close();
}
private void addData() throws IOException {
int i = target.read();
if (debug)
@@ -205,12 +205,12 @@ public class Delta {
return;
output.addData((byte)i);
}
class SourceState {
private Checksum checksum;
private SeekableSource source;
public SourceState(SeekableSource source) throws IOException {
checksum = new Checksum(source, S);
this.source = source;
@@ -232,23 +232,23 @@ public class Delta {
" source=" + this.source +
"";
}
}
class TargetState {
private ReadableByteChannel c;
private ByteBuffer tbuf = ByteBuffer.allocate(blocksize());
private ByteBuffer sbuf = ByteBuffer.allocate(blocksize());
private long hash;
private boolean hashReset = true;
private boolean eof;
TargetState(InputStream targetIS) throws IOException {
c = Channels.newChannel(targetIS);
tbuf.limit(0);
}
private int blocksize() {
return Math.min(1024 * 16, S * 4);
}
@@ -362,13 +362,13 @@ public class Delta {
" eof=" + this.eof +
"]";
}
private String dump() { return dump(tbuf); }
private String dump(ByteBuffer bb) {
return getTextDump(bb);
}
private void append(StringBuffer sb, int value) {
char b1 = (char)((value >> 4) & 0x0F);
char b2 = (char)((value) & 0x0F);
@@ -392,7 +392,7 @@ public class Delta {
}
}
/**
* Creates a patch using file names.
*/
@@ -426,6 +426,7 @@ public class Delta {
"source or target is too large, max length is "
+ Integer.MAX_VALUE);
System.err.println("aborting..");
output.close();
return;
}
@@ -437,7 +438,7 @@ public class Delta {
if (debug) //gls031504a
System.out.println("finished generating delta");
}
private void debug(String s) {
if (debug)
System.err.println(s);
@@ -1,4 +1,4 @@
/*
/*
*
* Copyright (c) 2001 Torgeir Veimo
*
@@ -31,26 +31,26 @@ import java.io.IOException;
* Interface for DIFF writers.
*/
public interface DiffWriter extends Closeable {
/**
* Add a GDIFF copy instruction.
*/
public void addCopy(long offset, int length) throws IOException;
/**
* Add a GDIFF data instruction.
* Implementors should buffer the data.
*/
public void addData(byte b) throws IOException;
/**
* Flushes to output, e.g. any data added.
*/
public void flush() throws IOException;
/**
* Closes this stream.
* Note that {@link Diff} will invoke this method at the end.
* Note that {@link DiffWriter} will invoke this method at the end.
*/
public void close() throws IOException;
}
@@ -52,13 +52,14 @@ import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
/**
* This class patches an input file with a GDIFF patch fil�e.
* This class patches an input file with a GDIFF patch file.
*
* The patch file follows the GDIFF file specification available at
* {@link http://www.w3.org/TR/NOTE-gdiff-19970901.html}.
*
* <a href="http://www.w3.org/TR/NOTE-gdiff-19970901.html">http://www.w3.org/TR/NOTE-gdiff-19970901.html</a>.
*/
public class GDiffPatcher {
private ByteBuffer buf = ByteBuffer.allocate(1024);
private byte buf2[] = buf.array();
@@ -67,14 +68,14 @@ public class GDiffPatcher {
*/
public GDiffPatcher() {
}
/**
* Patches to an output file.
*/
public void patch(File sourceFile, File patchFile, File outputFile)
throws IOException
{
RandomAccessFileSeekableSource source =new RandomAccessFileSeekableSource(new RandomAccessFile(sourceFile, "r"));
RandomAccessFileSeekableSource source =new RandomAccessFileSeekableSource(new RandomAccessFile(sourceFile, "r"));
InputStream patch = new FileInputStream(patchFile);
OutputStream output = new FileOutputStream(outputFile);
try {
@@ -87,14 +88,14 @@ public class GDiffPatcher {
output.close();
}
}
/**
* Patches to an output stream.
*/
public void patch(byte[] source, InputStream patch, OutputStream output) throws IOException {
patch(new ByteBufferSeekableSource(source), patch, output);
}
/**
* Patches in memory, returning the patch result.
*/
@@ -103,12 +104,12 @@ public class GDiffPatcher {
patch(source, new ByteArrayInputStream(patch), os);
return os.toByteArray();
}
/**
* Patches to an output stream.
*/
public void patch(SeekableSource source, InputStream patch, OutputStream out) throws IOException {
DataOutputStream outOS = new DataOutputStream(out);
DataInputStream patchIS = new DataInputStream(patch);
@@ -128,12 +129,12 @@ public class GDiffPatcher {
break;
int length;
int offset;
if (command <= DATA_MAX) {
append(command, patchIS, outOS);
continue;
}
switch (command) {
case DATA_USHORT: // ushort, n bytes following; append
length = patchIS.readUnsignedShort();
@@ -178,7 +179,7 @@ public class GDiffPatcher {
length = patchIS.readInt();
copy(loffset, length, source, outOS);
break;
default:
default:
throw new IllegalStateException("command " + command);
}
}
@@ -12,7 +12,18 @@
*/
package cpw.mods.fml.server;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.apache.commons.io.IOUtils;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.MapDifference;
@@ -23,10 +34,13 @@ import net.minecraft.network.packet.NetHandler;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.Packet131MapData;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.StringTranslate;
import net.minecraft.world.World;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.IFMLSidedHandler;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ModContainer;
import cpw.mods.fml.common.ObfuscationReflectionHelper;
import cpw.mods.fml.common.network.EntitySpawnAdjustmentPacket;
import cpw.mods.fml.common.network.EntitySpawnPacket;
@@ -189,4 +203,66 @@ public class FMLServerHandler implements IFMLSidedHandler
{
}
@Override
public void addModAsResource(ModContainer container)
{
File source = container.getSource();
try
{
if (source.isDirectory())
{
searchDirForENUSLanguage(source,"");
}
else
{
searchZipForENUSLanguage(source);
}
}
catch (IOException ioe)
{
}
}
private static final Pattern assetENUSLang = Pattern.compile("assets/(.*)/lang/en_US.lang");
private void searchZipForENUSLanguage(File source) throws IOException
{
ZipFile zf = new ZipFile(source);
for (ZipEntry ze : Collections.list(zf.entries()))
{
Matcher matcher = assetENUSLang.matcher(ze.getName());
if (matcher.matches())
{
FMLLog.fine("Injecting found translation data in zip file %s at %s into language system", source.getName(), ze.getName());
StringTranslate.inject(zf.getInputStream(ze));
}
}
zf.close();
}
private void searchDirForENUSLanguage(File source, String path) throws IOException
{
for (File file : source.listFiles())
{
String currPath = path+file.getName();
if (file.isDirectory())
{
searchDirForENUSLanguage(file, currPath+'/');
}
Matcher matcher = assetENUSLang.matcher(currPath);
if (matcher.matches())
{
FMLLog.fine("Injecting found translation data at %s into language system", currPath);
StringTranslate.inject(new FileInputStream(file));
}
}
}
@Override
public void updateResourcePackList()
{
}
@Override
public String getCurrentLanguage()
{
return "en_US";
}
}
+39 -37
View File
@@ -1,76 +1,78 @@
#Main FML Access Transformer configuration file
# TileEntity addMapping
public asi.a(Ljava/lang/Class;Ljava/lang/String;)V #MD:TileEntity/func_70306_a
public asp.a(Ljava/lang/Class;Ljava/lang/String;)V #MD:TileEntity/func_70306_a
# EntityList addMappings
public nq.a(Ljava/lang/Class;Ljava/lang/String;I)V #MD:EntityList/func_75618_a
public nq.a(Ljava/lang/Class;Ljava/lang/String;III)V #MD:EntityList/func_75614_a
public nq.b #FD:EntityList/field_75625_b #nameToClassMap
public nq.c #FD:EntityList/field_75626_c #classToNameMap
public nq.d #FD:EntityList/field_75623_d #idToClassMap
public nt.a(Ljava/lang/Class;Ljava/lang/String;I)V #MD:EntityList/func_75618_a
public nt.a(Ljava/lang/Class;Ljava/lang/String;III)V #MD:EntityList/func_75614_a
public nt.b #FD:EntityList/field_75625_b #nameToClassMap
public nt.c #FD:EntityList/field_75626_c #classToNameMap
public nt.d #FD:EntityList/field_75623_d #idToClassMap
# RenderEngine
#public bba.h #FD:RenderEngine/field_78367_h #textureList # -- MISSING MAPPING # -- MISSING MAPPING
#public bge.g #FD:RenderEngine/field_78366_k #texturePack # -- MISSING MAPPING
# RenderManager
public bga.q #FD:RenderManager/field_78729_o #renderers
public bgl.q #FD:RenderManager/field_78729_o #renderers
# RenderBlocks - everything
public bfg.* #FD:RenderBlocks/*
public bfg.*() #MD:RenderBlocks/*
public bfr.* #FD:RenderBlocks/*
public bfr.*() #MD:RenderBlocks/*
#RenderPlayer
#public-f bht.h #FD:RenderPlayer/field_77110_j #armorlist # -- MISSING MAPPING
#RenderBiped
public-f bgj.l #FD:RenderBiped/field_82424_k #armorlist
public-f bgu.l #FD:RenderBiped/field_82424_k #armorlist
#StringTranslate
#public bp.b #FD:StringTranslate/field_74815_b # -- MISSING MAPPING
#public bp.e #FD:StringTranslate/field_74813_d # -- MISSING MAPPING
# TileEntityRenderer
public bis.m #FD:TileEntityRenderer/field_76966_m
public bje.m #FD:TileEntityRenderer/field_76966_m
# CraftingManager - make the add recipe methods public
public aaa.a(Lxz;[Ljava/lang/Object;)Laad; #MD:CraftingManager/func_92103_a
public aaa.b(Lxz;[Ljava/lang/Object;)V #MD:CraftingManager/func_77596_b
public aaf.a(Lye;[Ljava/lang/Object;)Laai; #MD:CraftingManager/func_92103_a
public aaf.b(Lye;[Ljava/lang/Object;)V #MD:CraftingManager/func_77596_b
# WeightedRandomItem
public mg.a #FD:WeightedRandomItem/field_76292_a #probability
public mj.a #FD:WeightedRandomItem/field_76292_a #probability
# ItemStack
#public+f tv.c #FD:ItemStack/field_77993_c #itemId
# StatBase
public kr.a #FD:StatBase/field_75978_a #statName
public ku.a #FD:StatBase/field_75978_a #statName
# NetLoginHandler
public jv.a(Ljv;Z)Z #MD:NetLoginHandler/func_72531_a #'complete connection'
public jv.g #FD:NetLoginHandler/field_72543_h #userName
public jy.a(Ljy;Z)Z #MD:NetLoginHandler/func_72531_a #'complete connection'
public jy.g #FD:NetLoginHandler/field_72543_h #userName
# EntityPlayerMP getNextWindowId
public js.bJ()V #MD:EntityPlayerMP/func_71117_bO
public js.bX #FD:EntityPlayerMP/field_71139_cq
public jv.bN()V #MD:EntityPlayerMP/func_71117_bO
public jv.bY #FD:EntityPlayerMP/field_71139_cq
# EntityAITaskEntry
public pr #CL:EntityAITaskEntry
public pu #CL:EntityAITaskEntry
# EntityAITasks
public pq.a #FD:EntityAITasks/field_75782_a #taskList
public pt.a #FD:EntityAITasks/field_75782_a #taskList
# BlockChest
public and.m(Labr;III)Z #MD:BlockChest/func_72292_n #isOcelotBlockingChest
public ank.m(Labw;III)Z #MD:BlockChest/func_72292_n #isOcelotBlockingChest
# EntityLiving
#public ng.aU #FD:EntityLiving/field_70736_aM #carryoverDamage # -- MISSING MAPPING
public od.c #FD:EntityLiving/field_70714_bg #tasks
public og.c #FD:EntityLiving/field_70714_bg #tasks
#public ng.bG #FD:EntityLiving/field_70703_bu #isJumping # -- MISSING MAPPING
# EntityAIOcelotSit
protected qd.a(Labr;III)Z #MD:EntityAIOcelotSit/func_75398_a #nearestSittableBlock
protected qd.f()Z #MD:EntityAIOcelotSit/func_75399_f #isblocksittable
protected qg.a(Labw;III)Z #MD:EntityAIOcelotSit/func_75398_a #nearestSittableBlock
protected qg.f()Z #MD:EntityAIOcelotSit/func_75399_f #isblocksittable
# CallableMinecraftVersion - sanity check the MC version
public c #CL:CallableMinecraftVersion
public c.<init>(Lb;)V #MD:CallableMinecraftVersion/<init>(Lnet/minecraft/src/CrashReport;) #constructor
# EntityAnimal
public rm.bp #FD:EntityAnimal/field_70881_d #inLove
public rp.bp #FD:EntityAnimal/field_70881_d #inLove
# WorldType
public acb.<init>(ILjava/lang/String;)V #MD:WorldType/<init>(ILjava/lang/String;)
public acb.<init>(ILjava/lang/String;I)V #MD:WorldType/<init>(ILjava/lang/String;I)
public acg.<init>(ILjava/lang/String;)V #MD:WorldType/<init>(ILjava/lang/String;)
public acg.<init>(ILjava/lang/String;I)V #MD:WorldType/<init>(ILjava/lang/String;I)
# ComponentVillage
public ajf #CL:ComponentVillage
public ajm #CL:ComponentVillage
# StructureStart
public aiv.a #FD:StructureStart/field_75075_a
# EntityVillager - minmax lists
public tw.a(Labh;ILjava/util/Random;F)V #MD:EntityVillager/func_70948_a #addBuy
public tw.b(Labh;ILjava/util/Random;F)V #MD:EntityVillager/func_70949_b #addSell
public tw.bB #FD:EntityVillager/field_70958_bB
public tw.bC #FD:EntityVillager/field_70960_bC
public ub.a(Labm;ILjava/util/Random;F)V #MD:EntityVillager/func_70948_a #addBuy
public ub.b(Labm;ILjava/util/Random;F)V #MD:EntityVillager/func_70949_b #addSell
public ub.bB #FD:EntityVillager/field_70958_bB
public ub.bC #FD:EntityVillager/field_70960_bC
# GuiButtonMerchant
public axo #CL:GuiButtonMerchant
public axx #CL:GuiButtonMerchant
protected auo.a #FD:GuiYesNo/field_73942_a #guiScreen
protected aux.a #FD:GuiYesNo/field_73942_a #guiScreen
# Minecraft
public atn.C #FD:Minecraft/field_71425_J #running
public atn.M #FD:Minecraft/field_71446_o # textureManager
public atv.D #FD:Minecraft/field_71425_J #running
public atv.N #FD:Minecraft/field_71446_o # textureManager
+3 -3
View File
@@ -2,11 +2,11 @@
# Only runs at runtime because it's not necessary at compile time
# has deobf and obf mappings so it runs OK in mcp
# entityplayer -> network/player
ua cpw/mods/fml/common/network/Player
uf cpw/mods/fml/common/network/Player
net.minecraft.entity.player.EntityPlayer cpw/mods/fml/common/network/Player
# block -> blockproxy
aqs cpw/mods/fml/common/registry/BlockProxy
aqz cpw/mods/fml/common/registry/BlockProxy
net.minecraft.block.Block cpw/mods/fml/common/registry/BlockProxy
# item -> itemproxy
xx cpw/mods/fml/common/registry/ItemProxy
yc cpw/mods/fml/common/registry/ItemProxy
net.minecraft.item.Item cpw/mods/fml/common/registry/ItemProxy
+3 -3
View File
@@ -3,9 +3,9 @@
"modid": "mcp",
"name": "Minecraft Coder Pack",
"description": "Modding toolkit to decompile and deobfuscate the Minecraft client and server files.",
"version": "7.51",
"mcversion": "1.5.2",
"logoFile": "/mcp.png",
"version": "8.09",
"mcversion": "1.6.3",
"logoFile": "/mcplogo.png",
"url": "http://mcp.ocean-labs.de/",
"updateUrl": "",
"authors": ["Searge", "ProfMobius", "IngisKahn", "Fesh0r", "ZeuX", "R4wk", "Others"],
+511 -744
View File
File diff suppressed because it is too large. Load diff
+613 -312
View File
File diff suppressed because it is too large. Load diff
+18331 -18177
View File
File diff suppressed because it is too large. Load diff
+8 -8
View File
@@ -38,8 +38,8 @@ DirNatives = %(DirJars)s/bin/natives
Client = %(DirJars)s/bin/minecraft.jar
Server = %(DirJars)s/minecraft_server.jar
LWJGL = %(DirJars)s/bin/jinput.jar,%(DirJars)s/bin/lwjgl.jar,%(DirJars)s/bin/lwjgl_util.jar
MD5Client = 3c56fb4b77b1ca37dde69b5eb896fc4d
MD5Server = ff8f81970a5955737c356b534d3aee96
MD5Client = 233effe2110d40a0519cf1489e4ccb1c
MD5Server = 8ed981ab6030412f586bfe38ff0aaa82
[RETROGUARD]
Location = %(DirRuntime)s/bin/retroguard.jar
@@ -96,8 +96,8 @@ BinClient = %(DirBin)s/minecraft
BinServer = %(DirBin)s/minecraft_server
LogClient = %(DirLogs)s/client_compile.log
LogServer = %(DirLogs)s/server_compile.log
ClassPathClient = %(DirLib)s/,%(DirLib)s/*,%(DirJars)s/bin/minecraft.jar,%(DirJars)s/bin/jinput.jar,%(DirJars)s/bin/lwjgl.jar,%(DirJars)s/bin/lwjgl_util.jar
ClassPathServer = %(DirLib)s/,%(DirLib)s/*,%(DirJars)s/minecraft_server.jar
ClassPathClient =
ClassPathServer =
ClientFixes = %(DirConf)s/patches
FixStart = Start
IgnorePkg = paulscode,com,isom,ibxm,de/matthiasmann/twl,org,javax/xml,javax/ws,argo
@@ -127,8 +127,8 @@ LogFile = %(DirLogs)s/mcp.log
LogFileErr = %(DirLogs)s/mcperr.log
UpdateUrl =
IgnoreUpdate = %(DirBin)s,%(DirLib)s,%(DirLogs)s,%(DirModSrc)s,%(DirReobf)s,%(DirSrc)s,%(DirTemp)s,%(DirEclipse)s/Client/bin,%(DirEclipse)s/Server/bin,%(DirJars)s/world,%(DirJars)s/saves,%(DirJars)s/resources
RGIndex = 140000
ParamIndex = 40000
RGIndex = 143000
ParamIndex = 43000
[ASTYLE]
AstyleConfig = %(DirConf)s/astyle.cfg
@@ -159,5 +159,5 @@ CmdFernflower = %s -Xmx512M -jar %s -din=0 -rbr=0 -dgs=1 -asc=1 -log=WARN {indir
CmdExceptor = %s -jar %s {input} {output} {conf} {log}
CmdRecomp = %s -encoding UTF-8 -Xlint:-options -deprecation -g -source 1.6 -target 1.6 -classpath "{classpath}" -sourcepath {sourcepath} -d {outpath} {pkgs}
CmdRecompScala = %s -encoding UTF-8 -deprecation -target:jvm-1.6 -classpath "{classpath}" -sourcepath {sourcepath} -d {outpath} {pkgs}
CmdStartSrv = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" net.minecraft.server.MinecraftServer
CmdStartClt = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" -Djava.library.path={natives} Start
CmdStartSrv = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" cpw.mods.fml.relauncher.ServerLaunchWrapper {extraargs}
CmdStartClt = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" -Djava.library.path={natives} net.minecraft.launchwrapper.Launch --tweakClass cpw.mods.fml.common.launcher.FMLTweaker --version FML_DEV {extraargs}
+527 -427
View File
File diff suppressed because it is too large. Load diff
+15 -5
View File
@@ -151,6 +151,7 @@ CallableTexturePack,net/minecraft/client
CallableType2,net/minecraft/client
CallableUpdatingScreenName,net/minecraft/client
Minecraft,net/minecraft/client
MinecraftINNER13,net/minecraft/client
StatStringFormatKeyInv,net/minecraft/client
ThreadClientSleep,net/minecraft/client
ScheduledSound,net/minecraft/client/audio
@@ -164,7 +165,6 @@ AbstractClientPlayer,net/minecraft/client/entity
EntityClientPlayerMP,net/minecraft/client/entity
EntityOtherPlayerMP,net/minecraft/client/entity
EntityPlayerSP,net/minecraft/client/entity
RenderMinecartMobSpawner,net/minecraft/client/entity/render
ChatClickData,net/minecraft/client/gui
ChatLine,net/minecraft/client/gui
FontRenderer,net/minecraft/client/gui
@@ -376,6 +376,8 @@ ThreadConnectToServer,net/minecraft/client/multiplayer
ThreadLanServerFind,net/minecraft/client/multiplayer
ThreadLanServerPing,net/minecraft/client/multiplayer
WorldClient,net/minecraft/client/multiplayer
WorldClientINNER3,net/minecraft/client/multiplayer
WorldClientINNER4,net/minecraft/client/multiplayer
EffectRenderer,net/minecraft/client/particle
EntityAuraFX,net/minecraft/client/particle
EntityBreakingFX,net/minecraft/client/particle
@@ -466,6 +468,7 @@ RenderLiving,net/minecraft/client/renderer/entity
RenderMagmaCube,net/minecraft/client/renderer/entity
RenderManager,net/minecraft/client/renderer/entity
RenderMinecart,net/minecraft/client/renderer/entity
RenderMinecartMobSpawner,net/minecraft/client/renderer/entity
RenderMooshroom,net/minecraft/client/renderer/entity
RenderOcelot,net/minecraft/client/renderer/entity
RenderPainting,net/minecraft/client/renderer/entity
@@ -534,7 +537,6 @@ LanguageManager,net/minecraft/client/resources
Locale,net/minecraft/client/resources
ReloadableResourceManager,net/minecraft/client/resources
Resource,net/minecraft/client/resources
ResourceLocation,net/minecraft/client/resources
ResourceManager,net/minecraft/client/resources
ResourceManagerReloadListener,net/minecraft/client/resources
ResourcePack,net/minecraft/client/resources
@@ -602,6 +604,7 @@ CommandServerSay,net/minecraft/command
CommandServerStop,net/minecraft/command
CommandServerTp,net/minecraft/command
CommandServerWhitelist,net/minecraft/command
CommandSetPlayerTimeout,net/minecraft/command
CommandSetSpawnpoint,net/minecraft/command
CommandShowSeed,net/minecraft/command
CommandSpreadPlayers,net/minecraft/command
@@ -761,8 +764,8 @@ EntityAILookIdle,net/minecraft/entity/ai
EntityAIMate,net/minecraft/entity/ai
EntityAIMoveIndoors,net/minecraft/entity/ai
EntityAIMoveThroughVillage,net/minecraft/entity/ai
EntityAIMoveTowardsRestriction,net/minecraft/entity/ai
EntityAIMoveTowardsTarget,net/minecraft/entity/ai
EntityAIMoveTwardsRestriction,net/minecraft/entity/ai
EntityAINearestAttackableTarget,net/minecraft/entity/ai
EntityAINearestAttackableTargetSelector,net/minecraft/entity/ai
EntityAINearestAttackableTargetSorter,net/minecraft/entity/ai
@@ -800,10 +803,8 @@ AttributeInstance,net/minecraft/entity/ai/attributes
AttributeModifier,net/minecraft/entity/ai/attributes
BaseAttribute,net/minecraft/entity/ai/attributes
BaseAttributeMap,net/minecraft/entity/ai/attributes
ClientsideAttributeMap,net/minecraft/entity/ai/attributes
ModifiableAttributeInstance,net/minecraft/entity/ai/attributes
RangedAttribute,net/minecraft/entity/ai/attributes
ReadonlyAttributeInstance,net/minecraft/entity/ai/attributes
ServersideAttributeMap,net/minecraft/entity/ai/attributes
BossStatus,net/minecraft/entity/boss
EntityDragon,net/minecraft/entity/boss
@@ -851,6 +852,8 @@ EntitySnowman,net/minecraft/entity/monster
EntitySpider,net/minecraft/entity/monster
EntityWitch,net/minecraft/entity/monster
EntityZombie,net/minecraft/entity/monster
EntityZombieGroupData,net/minecraft/entity/monster
EntityZombieINNER1,net/minecraft/entity/monster
FilterIMob,net/minecraft/entity/monster
IMob,net/minecraft/entity/monster
ContainerSheep,net/minecraft/entity/passive
@@ -1068,6 +1071,7 @@ Packet12PlayerLook,net/minecraft/network/packet
Packet130UpdateSign,net/minecraft/network/packet
Packet131MapData,net/minecraft/network/packet
Packet132TileEntityData,net/minecraft/network/packet
Packet133TileEditorOpen,net/minecraft/network/packet
Packet13PlayerLookMove,net/minecraft/network/packet
Packet14BlockDig,net/minecraft/network/packet
Packet15Place,net/minecraft/network/packet
@@ -1115,6 +1119,7 @@ Packet41EntityEffect,net/minecraft/network/packet
Packet42RemoveEntityEffect,net/minecraft/network/packet
Packet43Experience,net/minecraft/network/packet
Packet44UpdateAttributes,net/minecraft/network/packet
Packet44UpdateAttributesSnapshot,net/minecraft/network/packet
Packet4UpdateTime,net/minecraft/network/packet
Packet51MapChunk,net/minecraft/network/packet
Packet51MapChunkData,net/minecraft/network/packet
@@ -1173,6 +1178,7 @@ ScoreboardSaveData,net/minecraft/scoreboard
ServerCommandScoreboard,net/minecraft/scoreboard
ServerCommandTestFor,net/minecraft/scoreboard
ServerScoreboard,net/minecraft/scoreboard
Team,net/minecraft/scoreboard
CallableIsServerModded,net/minecraft/server
CallableServerMemoryStats,net/minecraft/server
CallableServerProfiler,net/minecraft/server
@@ -1292,6 +1298,7 @@ MovementInput,net/minecraft/util
MovementInputFromOptions,net/minecraft/util
MovingObjectPosition,net/minecraft/util
ReportedException,net/minecraft/util
ResourceLocation,net/minecraft/util
ScreenShotHelper,net/minecraft/util
Session,net/minecraft/util
StatCollector,net/minecraft/util
@@ -1476,6 +1483,7 @@ ComponentNetherBridgeThrone,net/minecraft/world/gen/structure
ComponentScatteredFeature,net/minecraft/world/gen/structure
ComponentScatteredFeatureDesertPyramid,net/minecraft/world/gen/structure
ComponentScatteredFeatureJunglePyramid,net/minecraft/world/gen/structure
ComponentScatteredFeaturePieces,net/minecraft/world/gen/structure
ComponentScatteredFeaturePieces2,net/minecraft/world/gen/structure
ComponentScatteredFeatureSwampHut,net/minecraft/world/gen/structure
ComponentStronghold,net/minecraft/world/gen/structure
@@ -1513,6 +1521,8 @@ MapGenMineshaft,net/minecraft/world/gen/structure
MapGenNetherBridge,net/minecraft/world/gen/structure
MapGenStronghold,net/minecraft/world/gen/structure
MapGenStructure,net/minecraft/world/gen/structure
MapGenStructureData,net/minecraft/world/gen/structure
MapGenStructureIO,net/minecraft/world/gen/structure
MapGenVillage,net/minecraft/world/gen/structure
StructureBoundingBox,net/minecraft/world/gen/structure
StructureComponent,net/minecraft/world/gen/structure
1 class package
151 CallableType2 net/minecraft/client
152 CallableUpdatingScreenName net/minecraft/client
153 Minecraft net/minecraft/client
154 MinecraftINNER13 net/minecraft/client
155 StatStringFormatKeyInv net/minecraft/client
156 ThreadClientSleep net/minecraft/client
157 ScheduledSound net/minecraft/client/audio
165 EntityClientPlayerMP net/minecraft/client/entity
166 EntityOtherPlayerMP net/minecraft/client/entity
167 EntityPlayerSP net/minecraft/client/entity
RenderMinecartMobSpawner net/minecraft/client/entity/render
168 ChatClickData net/minecraft/client/gui
169 ChatLine net/minecraft/client/gui
170 FontRenderer net/minecraft/client/gui
376 ThreadLanServerFind net/minecraft/client/multiplayer
377 ThreadLanServerPing net/minecraft/client/multiplayer
378 WorldClient net/minecraft/client/multiplayer
379 WorldClientINNER3 net/minecraft/client/multiplayer
380 WorldClientINNER4 net/minecraft/client/multiplayer
381 EffectRenderer net/minecraft/client/particle
382 EntityAuraFX net/minecraft/client/particle
383 EntityBreakingFX net/minecraft/client/particle
468 RenderMagmaCube net/minecraft/client/renderer/entity
469 RenderManager net/minecraft/client/renderer/entity
470 RenderMinecart net/minecraft/client/renderer/entity
471 RenderMinecartMobSpawner net/minecraft/client/renderer/entity
472 RenderMooshroom net/minecraft/client/renderer/entity
473 RenderOcelot net/minecraft/client/renderer/entity
474 RenderPainting net/minecraft/client/renderer/entity
537 Locale net/minecraft/client/resources
538 ReloadableResourceManager net/minecraft/client/resources
539 Resource net/minecraft/client/resources
ResourceLocation net/minecraft/client/resources
540 ResourceManager net/minecraft/client/resources
541 ResourceManagerReloadListener net/minecraft/client/resources
542 ResourcePack net/minecraft/client/resources
604 CommandServerStop net/minecraft/command
605 CommandServerTp net/minecraft/command
606 CommandServerWhitelist net/minecraft/command
607 CommandSetPlayerTimeout net/minecraft/command
608 CommandSetSpawnpoint net/minecraft/command
609 CommandShowSeed net/minecraft/command
610 CommandSpreadPlayers net/minecraft/command
764 EntityAIMate net/minecraft/entity/ai
765 EntityAIMoveIndoors net/minecraft/entity/ai
766 EntityAIMoveThroughVillage net/minecraft/entity/ai
767 EntityAIMoveTowardsRestriction net/minecraft/entity/ai
768 EntityAIMoveTowardsTarget net/minecraft/entity/ai
EntityAIMoveTwardsRestriction net/minecraft/entity/ai
769 EntityAINearestAttackableTarget net/minecraft/entity/ai
770 EntityAINearestAttackableTargetSelector net/minecraft/entity/ai
771 EntityAINearestAttackableTargetSorter net/minecraft/entity/ai
803 AttributeModifier net/minecraft/entity/ai/attributes
804 BaseAttribute net/minecraft/entity/ai/attributes
805 BaseAttributeMap net/minecraft/entity/ai/attributes
ClientsideAttributeMap net/minecraft/entity/ai/attributes
806 ModifiableAttributeInstance net/minecraft/entity/ai/attributes
807 RangedAttribute net/minecraft/entity/ai/attributes
ReadonlyAttributeInstance net/minecraft/entity/ai/attributes
808 ServersideAttributeMap net/minecraft/entity/ai/attributes
809 BossStatus net/minecraft/entity/boss
810 EntityDragon net/minecraft/entity/boss
852 EntitySpider net/minecraft/entity/monster
853 EntityWitch net/minecraft/entity/monster
854 EntityZombie net/minecraft/entity/monster
855 EntityZombieGroupData net/minecraft/entity/monster
856 EntityZombieINNER1 net/minecraft/entity/monster
857 FilterIMob net/minecraft/entity/monster
858 IMob net/minecraft/entity/monster
859 ContainerSheep net/minecraft/entity/passive
1071 Packet130UpdateSign net/minecraft/network/packet
1072 Packet131MapData net/minecraft/network/packet
1073 Packet132TileEntityData net/minecraft/network/packet
1074 Packet133TileEditorOpen net/minecraft/network/packet
1075 Packet13PlayerLookMove net/minecraft/network/packet
1076 Packet14BlockDig net/minecraft/network/packet
1077 Packet15Place net/minecraft/network/packet
1119 Packet42RemoveEntityEffect net/minecraft/network/packet
1120 Packet43Experience net/minecraft/network/packet
1121 Packet44UpdateAttributes net/minecraft/network/packet
1122 Packet44UpdateAttributesSnapshot net/minecraft/network/packet
1123 Packet4UpdateTime net/minecraft/network/packet
1124 Packet51MapChunk net/minecraft/network/packet
1125 Packet51MapChunkData net/minecraft/network/packet
1178 ServerCommandScoreboard net/minecraft/scoreboard
1179 ServerCommandTestFor net/minecraft/scoreboard
1180 ServerScoreboard net/minecraft/scoreboard
1181 Team net/minecraft/scoreboard
1182 CallableIsServerModded net/minecraft/server
1183 CallableServerMemoryStats net/minecraft/server
1184 CallableServerProfiler net/minecraft/server
1298 MovementInputFromOptions net/minecraft/util
1299 MovingObjectPosition net/minecraft/util
1300 ReportedException net/minecraft/util
1301 ResourceLocation net/minecraft/util
1302 ScreenShotHelper net/minecraft/util
1303 Session net/minecraft/util
1304 StatCollector net/minecraft/util
1483 ComponentScatteredFeature net/minecraft/world/gen/structure
1484 ComponentScatteredFeatureDesertPyramid net/minecraft/world/gen/structure
1485 ComponentScatteredFeatureJunglePyramid net/minecraft/world/gen/structure
1486 ComponentScatteredFeaturePieces net/minecraft/world/gen/structure
1487 ComponentScatteredFeaturePieces2 net/minecraft/world/gen/structure
1488 ComponentScatteredFeatureSwampHut net/minecraft/world/gen/structure
1489 ComponentStronghold net/minecraft/world/gen/structure
1521 MapGenNetherBridge net/minecraft/world/gen/structure
1522 MapGenStronghold net/minecraft/world/gen/structure
1523 MapGenStructure net/minecraft/world/gen/structure
1524 MapGenStructureData net/minecraft/world/gen/structure
1525 MapGenStructureIO net/minecraft/world/gen/structure
1526 MapGenVillage net/minecraft/world/gen/structure
1527 StructureBoundingBox net/minecraft/world/gen/structure
1528 StructureComponent net/minecraft/world/gen/structure
+165 -106
View File
@@ -3,6 +3,7 @@ p_100006_1_,par1Str,2
p_100006_2_,par2Str,2
p_100009_0_,par0,2
p_100012_1_,par1,2
p_100014_0_,par0McoServerList,2
p_100015_0_,par0KeyBinding,2
p_101001_1_,par1,2
p_101001_2_,par2,2
@@ -88,7 +89,6 @@ p_104088_3_,par3Tessellator,2
p_104089_1_,par1,2
p_104089_2_,par2,2
p_110121_0_,par0Str,2
p_110122_1_,par1ChatMessageComponent,2
p_110125_1_,par1Icon,2
p_110128_1_,par1Entity,2
p_110129_0_,par0World,2
@@ -103,13 +103,13 @@ p_110131_1_,par1ItemStack,2
p_110132_1_,par1IInvBasic,2
p_110133_1_,par1Str,2
p_110134_1_,par1IInvBasic,2
p_110135_1_,par1ItemStack,2
p_110145_1_,par1Entity,2
p_110146_1_,par1,2
p_110146_2_,par2,2
p_110148_1_,par1Attribute,2
p_110149_1_,par1,2
p_110160_1_,par1,2
p_110160_2_,par2,2
p_110161_1_,par1EntityLivingData,2
p_110162_1_,par1Entity,2
p_110162_2_,par2,2
@@ -214,7 +214,6 @@ p_110431_0_,par0Minecraft,2
p_110439_1_,par1File,2
p_110459_1_,par1ChatMessageComponent,2
p_110459_2_,par2,2
p_110460_1_,par1ChatMessageComponent,2
p_110468_1_,par1,2
p_110470_1_,par1,2
p_110472_1_,par1,2
@@ -260,8 +259,6 @@ p_110503_1_,par1Str,2
p_110503_2_,par2JsonObject,2
p_110504_1_,par1MetadataSectionSerializer,2
p_110504_2_,par2Class,2
p_110509_1_,par1,2
p_110509_2_,par2,2
p_110510_0_,par0GuiScreenTemporaryResourcePackSelectSelectionList,2
p_110518_1_,par1TextureManager,2
p_110526_1_,par1Str,2
@@ -381,28 +378,7 @@ p_110786_1_,par1EntityEnderCrystal,2
p_110788_1_,par1EntityItemFrame,2
p_110790_1_,par1EntityFireball,2
p_110791_1_,par1EntityFishHook,2
p_110793_1_,par1FontRenderer,2
p_110793_2_,par2TextureManager,2
p_110793_3_,par3ItemStack,2
p_110793_4_,par4,2
p_110793_5_,par5,2
p_110793_6_,par6Str,2
p_110794_1_,par1FontRenderer,2
p_110794_2_,par2TextureManager,2
p_110794_3_,par3ItemStack,2
p_110794_4_,par4,2
p_110794_5_,par5,2
p_110795_1_,par1FontRenderer,2
p_110795_2_,par2TextureManager,2
p_110795_3_,par3ItemStack,2
p_110795_4_,par4,2
p_110795_5_,par5,2
p_110796_1_,par1EntityItem,2
p_110797_1_,par1FontRenderer,2
p_110797_2_,par2TextureManager,2
p_110797_3_,par3ItemStack,2
p_110797_4_,par4,2
p_110797_5_,par5,2
p_110799_1_,par1EntityLeashKnot,2
p_110799_2_,par2,2
p_110799_4_,par4,2
@@ -417,20 +393,6 @@ p_110808_1_,par1EntityTNTPrimed,2
p_110809_1_,par1EntityWitherSkull,2
p_110813_1_,par1EntityLivingBase,2
p_110817_1_,par1AbstractClientPlayer,2
p_110818_1_,par1AbstractClientPlayer,2
p_110818_2_,par2,2
p_110818_3_,par3,2
p_110819_1_,par1AbstractClientPlayer,2
p_110819_2_,par2,2
p_110819_4_,par4,2
p_110819_6_,par6,2
p_110819_8_,par8,2
p_110819_9_,par9,2
p_110820_1_,par1AbstractClientPlayer,2
p_110820_2_,par2,2
p_110821_1_,par1AbstractClientPlayer,2
p_110821_2_,par2,2
p_110821_3_,par3,2
p_110827_1_,par1EntityLiving,2
p_110827_2_,par2,2
p_110827_4_,par4,2
@@ -604,7 +566,6 @@ p_111124_1_,par1AttributeModifier,2
p_111127_1_,par1UUID,2
p_111128_1_,par1,2
p_111130_1_,par1,2
p_111140_1_,par1,2
p_111145_1_,par1,2
p_111147_1_,par1Multimap,2
p_111148_1_,par1Multimap,2
@@ -612,13 +573,9 @@ p_111149_1_,par1ModifiableAttributeInstance,2
p_111150_1_,par1Attribute,2
p_111151_1_,par1Attribute,2
p_111152_1_,par1Str,2
p_111155_1_,par1Str,2
p_111156_1_,par1Attribute,2
p_111157_1_,par1Attribute,2
p_111158_1_,par1Str,2
p_111159_1_,par1Attribute,2
p_111168_1_,par1,2
p_111181_1_,par1EntityLivingBase,2
p_111183_1_,par1,2
p_111183_2_,par2AttributeModifier,2
p_111184_1_,par1Attribute,2
@@ -669,15 +626,18 @@ p_111261_0_,par0AttributeInstance,2
p_111262_0_,par0AttributeModifier,2
p_111270_1_,par1AxisAlignedBB,2
p_111271_1_,par1,2
p_111275_1_,par1EntityPlayer,2
p_111275_2_,par2TextureManager,2
p_111275_3_,par3MapData,2
p_111282_1_,par1EntityPlayer,2
p_111282_2_,par2EntityLivingBase,2
p_120016_0_,par0DedicatedServer,2
p_120017_0_,par0MinecraftServerGui,2
p_120033_0_,par0StatsComponent,2
p_120035_1_,par1ArrayOfLong,2
p_130000_1_,par1EntityLivingBase,2
p_130000_2_,par2,2
p_130000_4_,par4,2
p_130000_6_,par6,2
p_130000_8_,par8,2
p_130000_9_,par9,2
p_130002_1_,par1EntityPlayer,2
p_130005_1_,par1EntityLiving,2
p_130005_2_,par2,2
@@ -685,20 +645,16 @@ p_130006_1_,par1EntityLiving,2
p_130006_2_,par2,2
p_130006_3_,par3,2
p_130007_1_,par1EntityLiving,2
p_130008_1_,par1EntityLivingBase,2
p_130008_2_,par2,2
p_130008_4_,par4,2
p_130008_6_,par6,2
p_130009_1_,par1EntityLivingBase,2
p_130009_1_,par1AbstractClientPlayer,2
p_130009_2_,par2,2
p_130009_4_,par4,2
p_130009_6_,par6,2
p_130009_8_,par8,2
p_130009_9_,par9,2
p_130011_1_,par1Entity,2
p_130013_10_,par10,2
p_130013_1_,par1AbstractClientPlayer,2
p_130013_1_,par1EntityLiving,2
p_130013_2_,par2,2
p_130013_4_,par4,2
p_130013_6_,par6,2
p_130013_8_,par8Str,2
p_130013_9_,par9,2
p_130013_3_,par3,2
p_130015_1_,par1,2
p_130015_2_,par2,2
p_130015_3_,par3,2
@@ -779,22 +735,12 @@ p_130119_5_,par5Tessellator,2
p_130122_0_,par0McoServerList,2
p_130122_1_,par1,2
p_130123_1_,par1,2
p_130125_0_,par0McoServerList,2
p_130126_0_,par0McoServerList,2
p_130126_1_,par1List,2
p_130128_0_,par0McoServerList,2
p_130129_1_,par1Session,2
p_130198_1_,par1AbstractClientPlayer,2
p_130198_2_,par2,2
p_130198_3_,par3,2
p_130198_4_,par4,2
p_130199_1_,par1AbstractClientPlayer,2
p_130199_2_,par2,2
p_130199_4_,par4,2
p_130199_6_,par6,2
p_130220_1_,par1AbstractClientPlayer,2
p_130220_2_,par2,2
p_130220_3_,par3,2
p_130225_1_,par1,2
p_135011_0_,par0GuiLanguage,2
p_135012_0_,par0GuiLanguage,2
p_135013_0_,par0GuiLanguage,2
p_135020_1_,par1JsonElement,2
p_135020_2_,par2Type,2
p_135020_3_,par3JsonDeserializationContext,2
@@ -823,8 +769,6 @@ p_135066_1_,par1World,2
p_135066_2_,par2,2
p_135066_3_,par3,2
p_135066_4_,par4,2
p_135072_0_,par0ContainerRepair,2
p_135073_0_,par0ContainerRepair,2
p_140008_0_,par0GuiScreenOnlineServers,2
p_140008_1_,par1,2
p_140009_1_,par1,2
@@ -840,16 +784,11 @@ p_140020_1_,par1,2
p_140020_2_,par2,2
p_140020_3_,par3,2
p_140020_4_,par4,2
p_140022_0_,par0GuiScreenOnlineServers,2
p_140023_0_,par0GuiScreenOnlineServers,2
p_140024_0_,par0GuiScreenOnlineServers,2
p_140024_1_,par1McoServer,2
p_140025_0_,par0GuiScreenOnlineServers,2
p_140026_0_,par0GuiScreenOnlineServers,2
p_140026_1_,par1Str,2
p_140027_0_,par0GuiScreenOnlineServers,2
p_140027_1_,par1,2
p_140028_0_,par0GuiScreenOnlineServers,2
p_140030_1_,par1,2
p_140031_0_,par0GuiScreenOnlineServers,2
p_140031_1_,par1,2
@@ -859,7 +798,6 @@ p_140031_4_,par4,2
p_140031_5_,par5,2
p_140032_1_,par1,2
p_140033_0_,par0GuiScreenOnlineServers,2
p_140034_0_,par0GuiScreenOnlineServers,2
p_140035_0_,par0GuiScreenOnlineServers,2
p_140035_1_,par1,2
p_140035_2_,par2,2
@@ -878,10 +816,64 @@ p_140058_1_,par1McoServer,2
p_140065_1_,par1List,2
p_140068_1_,par1McoServer,2
p_140068_2_,par2McoServer,2
p_142010_1_,par1EntityPlayer,2
p_142012_1_,par1Team,2
p_142014_1_,par1EntityLivingBase,2
p_142017_1_,par1,2
p_142018_1_,par1EntityLivingBase,2
p_142018_2_,par2EntityLivingBase,2
p_142020_1_,par1Str,2
p_142023_0_,par0GuiScreenOnlineServers,2
p_142024_0_,par0Minecraft,2
p_142030_0_,par0WorldClient,2
p_142031_1_,par1Packet133TileEditorOpen,2
p_142038_1_,par1,2
p_142038_2_,par2,2
p_142038_3_,par3,2
p_142053_1_,par1Str,2
p_142054_1_,par1Team,2
p_143006_1_,par1,2
p_143009_1_,par1World,2
p_143009_2_,par2NBTTagCompound,2
p_143011_1_,par1NBTTagCompound,2
p_143012_1_,par1NBTTagCompound,2
p_143017_1_,par1NBTTagCompound,2
p_143020_1_,par1World,2
p_143020_2_,par2NBTTagCompound,2
p_143021_1_,par1,2
p_143021_2_,par2,2
p_143022_1_,par1NBTTagCompound,2
p_143026_1_,par1,2
p_143026_2_,par2,2
p_143026_3_,par3StructureStart,2
p_143027_1_,par1World,2
p_143028_1_,par1,2
p_143028_2_,par2,2
p_143028_3_,par3,2
p_143030_1_,par1,2
p_143030_2_,par2,2
p_143030_3_,par3,2
p_143031_0_,par0Class,2
p_143031_1_,par1Str,2
p_143032_0_,par0NBTTagCompound,2
p_143032_1_,par1World,2
p_143033_0_,par0StructureStart,2
p_143034_0_,par0Class,2
p_143034_1_,par1Str,2
p_143035_0_,par0NBTTagCompound,2
p_143035_1_,par1World,2
p_143036_0_,par0StructureComponent,2
p_143042_1_,par1,2
p_143042_2_,par2,2
p_143043_1_,par1NBTTagCompound,2
p_143043_2_,par2,2
p_143043_3_,par3,2
p_143047_1_,par1Str,2
p_70000_1_,par1PlayerUsageSnooper,2
p_70001_1_,par1PlayerUsageSnooper,2
p_70003_1_,par1,2
p_70003_2_,par2Str,2
p_70006_1_,par1ChatMessageComponent,2
p_70011_1_,par1,2
p_70011_3_,par3,2
p_70011_5_,par5,2
@@ -1159,6 +1151,7 @@ p_70690_1_,par1PotionEffect,2
p_70691_1_,par1,2
p_70693_1_,par1EntityPlayer,2
p_70695_1_,par1PotionEffect,2
p_70695_2_,par2,2
p_70778_1_,par1PathEntity,2
p_70783_1_,par1,2
p_70783_2_,par2,2
@@ -1276,8 +1269,6 @@ p_71019_1_,par1ItemStack,2
p_71019_2_,par2,2
p_71020_1_,par1,2
p_71021_1_,par1ItemStack,2
p_71022_1_,par1EntityLivingBase,2
p_71022_2_,par2,2
p_71023_1_,par1,2
p_71027_1_,par1,2
p_71029_1_,par1StatBase,2
@@ -3048,8 +3039,6 @@ p_73049_3_,par3,2
p_73049_4_,par4,2
p_73049_5_,par5,2
p_73049_6_,par6,2
p_73050_1_,par1Entity,2
p_73050_2_,par2,2
p_73052_1_,par1WorldSettings,2
p_73057_1_,par1EnumCreatureType,2
p_73057_2_,par2,2
@@ -3403,6 +3392,8 @@ p_74015_1_,par1,2
p_74017_0_,par0ServerData,2
p_74019_0_,par0GuiMultiplayer,2
p_74020_0_,par0GuiMultiplayer,2
p_74042_0_,par0GuiLanguage,2
p_74043_0_,par0GuiLanguage,2
p_74059_0_,par0GuiSelectWorld,2
p_74061_0_,par0GuiScreen,2
p_74061_1_,par1Str,2
@@ -4981,6 +4972,7 @@ p_76354_1_,par1Entity,2
p_76356_0_,par0Entity,2
p_76356_1_,par1Entity,2
p_76358_0_,par0EntityLivingBase,2
p_76360_1_,par1EntityLivingBase,2
p_76362_0_,par0EntityFireball,2
p_76362_1_,par1Entity,2
p_76365_0_,par0EntityPlayer,2
@@ -5497,6 +5489,11 @@ p_77014_4_,par4,2
p_77014_6_,par6,2
p_77014_8_,par8,2
p_77014_9_,par9,2
p_77015_1_,par1FontRenderer,2
p_77015_2_,par2TextureManager,2
p_77015_3_,par3ItemStack,2
p_77015_4_,par4,2
p_77015_5_,par5,2
p_77017_1_,par1Tessellator,2
p_77017_2_,par2,2
p_77017_3_,par3,2
@@ -5515,6 +5512,11 @@ p_77020_4_,par4,2
p_77020_5_,par5,2
p_77020_6_,par6,2
p_77020_7_,par7,2
p_77021_1_,par1FontRenderer,2
p_77021_2_,par2TextureManager,2
p_77021_3_,par3ItemStack,2
p_77021_4_,par4,2
p_77021_5_,par5,2
p_77026_1_,par1Tessellator,2
p_77026_2_,par2Icon,2
p_77028_1_,par1EntityLightningBolt,2
@@ -5537,6 +5539,10 @@ p_77031_9_,par9,2
p_77032_1_,par1EntityLivingBase,2
p_77032_2_,par2,2
p_77032_3_,par3,2
p_77033_1_,par1EntityLivingBase,2
p_77033_2_,par2,2
p_77033_4_,par4,2
p_77033_6_,par6,2
p_77034_1_,par1,2
p_77034_2_,par2,2
p_77034_3_,par3,2
@@ -5687,7 +5693,7 @@ p_77097_3_,par3,2
p_77099_1_,par1EntityPig,2
p_77099_2_,par2,2
p_77099_3_,par3,2
p_77100_1_,par1EntityLivingBase,2
p_77100_1_,par1AbstractClientPlayer,2
p_77100_2_,par2,2
p_77101_1_,par1EntityLivingBase,2
p_77101_2_,par2,2
@@ -5695,17 +5701,17 @@ p_77101_4_,par4,2
p_77101_6_,par6,2
p_77101_8_,par8,2
p_77101_9_,par9,2
p_77102_1_,par1EntityLivingBase,2
p_77102_1_,par1AbstractClientPlayer,2
p_77102_2_,par2,2
p_77102_3_,par3,2
p_77102_4_,par4,2
p_77104_1_,par1AbstractClientPlayer,2
p_77104_2_,par2,2
p_77105_1_,par1EntityLivingBase,2
p_77105_1_,par1AbstractClientPlayer,2
p_77105_2_,par2,2
p_77105_4_,par4,2
p_77105_6_,par6,2
p_77107_1_,par1EntityLivingBase,2
p_77107_1_,par1AbstractClientPlayer,2
p_77107_2_,par2,2
p_77107_3_,par3,2
p_77113_1_,par1EntitySheep,2
@@ -5812,6 +5818,8 @@ p_77215_2_,par2,2
p_77216_1_,par1,2
p_77218_1_,par1,2
p_77219_1_,par1GuiButton,2
p_77220_1_,par1,2
p_77220_2_,par2,2
p_77222_1_,par1,2
p_77222_2_,par2,2
p_77222_3_,par3Tessellator,2
@@ -6320,6 +6328,9 @@ p_78280_1_,par1Str,2
p_78280_2_,par2,2
p_78282_0_,par0Str,2
p_78283_1_,par1Str,2
p_78319_1_,par1EntityPlayer,2
p_78319_2_,par2TextureManager,2
p_78319_3_,par3MapData,2
p_78334_1_,par1StatCrafting,2
p_78334_2_,par2StatCrafting,2
p_78337_1_,par1StatCrafting,2
@@ -7100,7 +7111,12 @@ p_82404_4_,par4,2
p_82404_6_,par6,2
p_82404_8_,par8,2
p_82404_9_,par9,2
p_82408_1_,par1EntityLiving,2
p_82406_1_,par1FontRenderer,2
p_82406_2_,par2TextureManager,2
p_82406_3_,par3ItemStack,2
p_82406_4_,par4,2
p_82406_5_,par5,2
p_82408_1_,par1EntityLivingBase,2
p_82408_2_,par2,2
p_82408_3_,par3,2
p_82409_1_,par1EntityWitch,2
@@ -7464,7 +7480,9 @@ p_82842_1_,par1EntityItemFrame,2
p_82846_1_,par1EntityPlayer,2
p_82846_2_,par2,2
p_82847_1_,par1ICrafting,2
p_82849_0_,par0ContainerRepair,2
p_82850_1_,par1Str,2
p_82851_0_,par0ContainerRepair,2
p_82869_1_,par1EntityPlayer,2
p_82870_1_,par1EntityPlayer,2
p_82870_2_,par2ItemStack,2
@@ -7658,6 +7676,7 @@ p_92044_1_,par1,2
p_92045_1_,par1,2
p_92046_1_,par1,2
p_92058_1_,par1ItemStack,2
p_92062_1_,par1ChatMessageComponent,2
p_92070_1_,par1Str,2
p_92070_2_,par2,2
p_92070_3_,par3,2
@@ -7767,6 +7786,12 @@ p_94146_1_,par1EntityMinecartTNT,2
p_94146_2_,par2,2
p_94146_3_,par3Block,2
p_94146_4_,par4,2
p_94148_1_,par1FontRenderer,2
p_94148_2_,par2TextureManager,2
p_94148_3_,par3ItemStack,2
p_94148_4_,par4,2
p_94148_5_,par5,2
p_94148_6_,par6Str,2
p_94149_1_,par1,2
p_94149_2_,par2,2
p_94149_3_,par3Icon,2
@@ -8027,6 +8052,7 @@ p_96095_1_,par1,2
p_96095_2_,par2,2
p_96095_3_,par3,2
p_96095_4_,par4,2
p_96098_1_,par1ItemStack,2
p_96099_1_,par1,2
p_96102_1_,par1,2
p_96104_1_,par1Str,2
@@ -8221,6 +8247,13 @@ p_96449_4_,par4,2
p_96449_6_,par6,2
p_96449_8_,par8Str,2
p_96449_9_,par9,2
p_96450_10_,par10,2
p_96450_1_,par1AbstractClientPlayer,2
p_96450_2_,par2,2
p_96450_4_,par4,2
p_96450_6_,par6,2
p_96450_8_,par8Str,2
p_96450_9_,par9,2
p_96456_1_,par1ServerScoreboard,2
p_96456_2_,par2EntityPlayerMP,2
p_96457_1_,par1EntityPlayer,2
@@ -8342,7 +8375,7 @@ p_96660_1_,par1,2
p_96662_1_,par1Str,2
p_96664_1_,par1Str,2
p_96666_1_,par1Str,2
p_96667_0_,par0ScorePlayerTeam,2
p_96667_0_,par0Team,2
p_96667_1_,par1Str,2
p_96681_1_,par1Str,2
p_98034_1_,par1EntityPlayer,2
@@ -8400,6 +8433,9 @@ p_98235_1_,par1Str,2
p_98235_2_,par2Throwable,2
p_98236_1_,par1Str,2
p_98237_0_,par0LogAgent,2
p_98247_0_,par0McoServerList,2
p_98247_1_,par1List,2
p_98249_0_,par0McoServerList,2
p_98263_1_,par1,2
p_98263_2_,par2,2
p_98263_3_,par3,2
@@ -9260,7 +9296,6 @@ p_i1279_1_,par1,2
p_i1279_2_,par2,2
p_i1279_3_,par3,2
p_i1279_4_,par4,2
p_i1280_1_,par1StitchHolder,2
p_i1281_1_,par1,2
p_i1281_2_,par2Str,2
p_i1282_1_,par1Str,2
@@ -10054,7 +10089,6 @@ p_i1609_1_,par1Str,2
p_i1609_2_,par2,2
p_i1609_4_,par4,2
p_i1609_6_,par6,2
p_i1610_1_,par1Attribute,2
p_i1611_1_,par1EntityLivingBase,2
p_i1612_1_,par1EntityLiving,2
p_i1613_1_,par1EntityLiving,2
@@ -10113,8 +10147,6 @@ p_i1637_1_,par1EntityCreature,2
p_i1638_1_,par1EntityCreature,2
p_i1638_2_,par2,2
p_i1638_4_,par4,2
p_i1639_1_,par1EntityCreature,2
p_i1639_2_,par2,2
p_i1640_1_,par1EntityCreature,2
p_i1640_2_,par2,2
p_i1640_4_,par4,2
@@ -11655,17 +11687,44 @@ p_i2329_2_,par2McoServerListEmptyAnon,2
p_i2330_1_,par1,2
p_i2330_2_,par2Str,2
p_i2330_3_,par3,2
p_i2331_1_,par1DedicatedServer,2
p_i2332_1_,par1DedicatedServer,2
p_i2333_1_,par1DedicatedServer,2
p_i2334_1_,par1MinecraftServerGui,2
p_i2334_2_,par2JTextField,2
p_i2335_1_,par1MinecraftServerGui,2
p_i2336_1_,par1MinecraftServer,2
p_i2337_1_,par1MinecraftServer,2
p_i2338_1_,par1StatsComponent,2
p_i2339_1_,par1JTextArea,2
p_i2340_1_,par1TextAreaLogHandler,2
p_i2341_1_,par1Minecraft,2
p_i2342_1_,par1WorldClient,2
p_i2343_1_,par1WorldClient,2
p_i2344_1_,par1StitchHolder,2
p_i2344_2_,par2Str,2
p_i2345_1_,par1,2
p_i2345_2_,par2,2
p_i2345_3_,par3,2
p_i2345_4_,par4,2
p_i2346_1_,par1Packet44UpdateAttributes,2
p_i2346_2_,par2Str,2
p_i2346_3_,par3,2
p_i2346_5_,par5Collection,2
p_i2347_1_,par1EntityCreature,2
p_i2347_2_,par2,2
p_i2348_1_,par1EntityZombie,2
p_i2348_2_,par2,2
p_i2348_3_,par3,2
p_i2349_1_,par1EntityZombie,2
p_i2349_2_,par2,2
p_i2349_3_,par3,2
p_i2349_4_,par4EntityZombieINNER1,2
p_i2350_1_,par1,2
p_i2361_1_,par1DedicatedServer,2
p_i2362_1_,par1DedicatedServer,2
p_i2363_1_,par1DedicatedServer,2
p_i2364_1_,par1MinecraftServerGui,2
p_i2364_2_,par2JTextField,2
p_i2365_1_,par1MinecraftServerGui,2
p_i2366_1_,par1MinecraftServer,2
p_i2367_1_,par1MinecraftServer,2
p_i2368_1_,par1StatsComponent,2
p_i2369_1_,par1JTextArea,2
p_i2370_1_,par1TextAreaLogHandler,2
p_i43000_1_,par1ArrayOfInteger,2
p_i43001_1_,par1Str,2
p_i43002_1_,par1,2
p_i43002_2_,par2,2
p_main_0_,par0ArrayOfStr,2
p_openConnection_1_,par1URL,2
p_paint_1_,par1Graphics,2
1 param name side
3 p_100006_2_ par2Str 2
4 p_100009_0_ par0 2
5 p_100012_1_ par1 2
6 p_100014_0_ par0McoServerList 2
7 p_100015_0_ par0KeyBinding 2
8 p_101001_1_ par1 2
9 p_101001_2_ par2 2
89 p_104089_1_ par1 2
90 p_104089_2_ par2 2
91 p_110121_0_ par0Str 2
p_110122_1_ par1ChatMessageComponent 2
92 p_110125_1_ par1Icon 2
93 p_110128_1_ par1Entity 2
94 p_110129_0_ par0World 2
103 p_110132_1_ par1IInvBasic 2
104 p_110133_1_ par1Str 2
105 p_110134_1_ par1IInvBasic 2
p_110135_1_ par1ItemStack 2
106 p_110145_1_ par1Entity 2
107 p_110146_1_ par1 2
108 p_110146_2_ par2 2
109 p_110148_1_ par1Attribute 2
110 p_110149_1_ par1 2
111 p_110160_1_ par1 2
112 p_110160_2_ par2 2
113 p_110161_1_ par1EntityLivingData 2
114 p_110162_1_ par1Entity 2
115 p_110162_2_ par2 2
214 p_110439_1_ par1File 2
215 p_110459_1_ par1ChatMessageComponent 2
216 p_110459_2_ par2 2
p_110460_1_ par1ChatMessageComponent 2
217 p_110468_1_ par1 2
218 p_110470_1_ par1 2
219 p_110472_1_ par1 2
259 p_110503_2_ par2JsonObject 2
260 p_110504_1_ par1MetadataSectionSerializer 2
261 p_110504_2_ par2Class 2
p_110509_1_ par1 2
p_110509_2_ par2 2
262 p_110510_0_ par0GuiScreenTemporaryResourcePackSelectSelectionList 2
263 p_110518_1_ par1TextureManager 2
264 p_110526_1_ par1Str 2
378 p_110788_1_ par1EntityItemFrame 2
379 p_110790_1_ par1EntityFireball 2
380 p_110791_1_ par1EntityFishHook 2
p_110793_1_ par1FontRenderer 2
p_110793_2_ par2TextureManager 2
p_110793_3_ par3ItemStack 2
p_110793_4_ par4 2
p_110793_5_ par5 2
p_110793_6_ par6Str 2
p_110794_1_ par1FontRenderer 2
p_110794_2_ par2TextureManager 2
p_110794_3_ par3ItemStack 2
p_110794_4_ par4 2
p_110794_5_ par5 2
p_110795_1_ par1FontRenderer 2
p_110795_2_ par2TextureManager 2
p_110795_3_ par3ItemStack 2
p_110795_4_ par4 2
p_110795_5_ par5 2
381 p_110796_1_ par1EntityItem 2
p_110797_1_ par1FontRenderer 2
p_110797_2_ par2TextureManager 2
p_110797_3_ par3ItemStack 2
p_110797_4_ par4 2
p_110797_5_ par5 2
382 p_110799_1_ par1EntityLeashKnot 2
383 p_110799_2_ par2 2
384 p_110799_4_ par4 2
393 p_110809_1_ par1EntityWitherSkull 2
394 p_110813_1_ par1EntityLivingBase 2
395 p_110817_1_ par1AbstractClientPlayer 2
p_110818_1_ par1AbstractClientPlayer 2
p_110818_2_ par2 2
p_110818_3_ par3 2
p_110819_1_ par1AbstractClientPlayer 2
p_110819_2_ par2 2
p_110819_4_ par4 2
p_110819_6_ par6 2
p_110819_8_ par8 2
p_110819_9_ par9 2
p_110820_1_ par1AbstractClientPlayer 2
p_110820_2_ par2 2
p_110821_1_ par1AbstractClientPlayer 2
p_110821_2_ par2 2
p_110821_3_ par3 2
396 p_110827_1_ par1EntityLiving 2
397 p_110827_2_ par2 2
398 p_110827_4_ par4 2
566 p_111127_1_ par1UUID 2
567 p_111128_1_ par1 2
568 p_111130_1_ par1 2
p_111140_1_ par1 2
569 p_111145_1_ par1 2
570 p_111147_1_ par1Multimap 2
571 p_111148_1_ par1Multimap 2
573 p_111150_1_ par1Attribute 2
574 p_111151_1_ par1Attribute 2
575 p_111152_1_ par1Str 2
p_111155_1_ par1Str 2
p_111156_1_ par1Attribute 2
p_111157_1_ par1Attribute 2
576 p_111158_1_ par1Str 2
577 p_111159_1_ par1Attribute 2
578 p_111168_1_ par1 2
p_111181_1_ par1EntityLivingBase 2
579 p_111183_1_ par1 2
580 p_111183_2_ par2AttributeModifier 2
581 p_111184_1_ par1Attribute 2
626 p_111262_0_ par0AttributeModifier 2
627 p_111270_1_ par1AxisAlignedBB 2
628 p_111271_1_ par1 2
p_111275_1_ par1EntityPlayer 2
p_111275_2_ par2TextureManager 2
p_111275_3_ par3MapData 2
629 p_111282_1_ par1EntityPlayer 2
630 p_111282_2_ par2EntityLivingBase 2
631 p_120016_0_ par0DedicatedServer 2
632 p_120017_0_ par0MinecraftServerGui 2
633 p_120033_0_ par0StatsComponent 2
634 p_120035_1_ par1ArrayOfLong 2
635 p_130000_1_ par1EntityLivingBase 2
636 p_130000_2_ par2 2
637 p_130000_4_ par4 2
638 p_130000_6_ par6 2
639 p_130000_8_ par8 2
640 p_130000_9_ par9 2
641 p_130002_1_ par1EntityPlayer 2
642 p_130005_1_ par1EntityLiving 2
643 p_130005_2_ par2 2
645 p_130006_2_ par2 2
646 p_130006_3_ par3 2
647 p_130007_1_ par1EntityLiving 2
648 p_130008_1_ p_130009_1_ par1EntityLivingBase par1AbstractClientPlayer 2
p_130008_2_ par2 2
p_130008_4_ par4 2
p_130008_6_ par6 2
p_130009_1_ par1EntityLivingBase 2
649 p_130009_2_ par2 2
650 p_130009_4_ par4 2
651 p_130009_6_ par6 2
652 p_130009_8_ par8 2
653 p_130009_9_ par9 2
654 p_130011_1_ par1Entity 2
655 p_130013_10_ p_130013_1_ par10 par1EntityLiving 2
p_130013_1_ par1AbstractClientPlayer 2
656 p_130013_2_ par2 2
657 p_130013_4_ p_130013_3_ par4 par3 2
p_130013_6_ par6 2
p_130013_8_ par8Str 2
p_130013_9_ par9 2
658 p_130015_1_ par1 2
659 p_130015_2_ par2 2
660 p_130015_3_ par3 2
735 p_130122_0_ par0McoServerList 2
736 p_130122_1_ par1 2
737 p_130123_1_ par1 2
p_130125_0_ par0McoServerList 2
p_130126_0_ par0McoServerList 2
p_130126_1_ par1List 2
p_130128_0_ par0McoServerList 2
738 p_130129_1_ par1Session 2
739 p_130198_1_ p_130220_1_ par1AbstractClientPlayer 2
740 p_130198_2_ p_130220_2_ par2 2
741 p_130198_3_ p_130220_3_ par3 2
742 p_130198_4_ p_130225_1_ par4 par1 2
p_130199_1_ par1AbstractClientPlayer 2
p_130199_2_ par2 2
p_130199_4_ par4 2
p_130199_6_ par6 2
743 p_135011_0_ par0GuiLanguage 2
p_135012_0_ par0GuiLanguage 2
p_135013_0_ par0GuiLanguage 2
744 p_135020_1_ par1JsonElement 2
745 p_135020_2_ par2Type 2
746 p_135020_3_ par3JsonDeserializationContext 2
769 p_135066_2_ par2 2
770 p_135066_3_ par3 2
771 p_135066_4_ par4 2
p_135072_0_ par0ContainerRepair 2
p_135073_0_ par0ContainerRepair 2
772 p_140008_0_ par0GuiScreenOnlineServers 2
773 p_140008_1_ par1 2
774 p_140009_1_ par1 2
784 p_140020_2_ par2 2
785 p_140020_3_ par3 2
786 p_140020_4_ par4 2
p_140022_0_ par0GuiScreenOnlineServers 2
787 p_140023_0_ par0GuiScreenOnlineServers 2
788 p_140024_0_ par0GuiScreenOnlineServers 2
789 p_140024_1_ par1McoServer 2
p_140025_0_ par0GuiScreenOnlineServers 2
p_140026_0_ par0GuiScreenOnlineServers 2
p_140026_1_ par1Str 2
790 p_140027_0_ par0GuiScreenOnlineServers 2
791 p_140027_1_ par1 2
p_140028_0_ par0GuiScreenOnlineServers 2
792 p_140030_1_ par1 2
793 p_140031_0_ par0GuiScreenOnlineServers 2
794 p_140031_1_ par1 2
798 p_140031_5_ par5 2
799 p_140032_1_ par1 2
800 p_140033_0_ par0GuiScreenOnlineServers 2
p_140034_0_ par0GuiScreenOnlineServers 2
801 p_140035_0_ par0GuiScreenOnlineServers 2
802 p_140035_1_ par1 2
803 p_140035_2_ par2 2
816 p_140065_1_ par1List 2
817 p_140068_1_ par1McoServer 2
818 p_140068_2_ par2McoServer 2
819 p_142010_1_ par1EntityPlayer 2
820 p_142012_1_ par1Team 2
821 p_142014_1_ par1EntityLivingBase 2
822 p_142017_1_ par1 2
823 p_142018_1_ par1EntityLivingBase 2
824 p_142018_2_ par2EntityLivingBase 2
825 p_142020_1_ par1Str 2
826 p_142023_0_ par0GuiScreenOnlineServers 2
827 p_142024_0_ par0Minecraft 2
828 p_142030_0_ par0WorldClient 2
829 p_142031_1_ par1Packet133TileEditorOpen 2
830 p_142038_1_ par1 2
831 p_142038_2_ par2 2
832 p_142038_3_ par3 2
833 p_142053_1_ par1Str 2
834 p_142054_1_ par1Team 2
835 p_143006_1_ par1 2
836 p_143009_1_ par1World 2
837 p_143009_2_ par2NBTTagCompound 2
838 p_143011_1_ par1NBTTagCompound 2
839 p_143012_1_ par1NBTTagCompound 2
840 p_143017_1_ par1NBTTagCompound 2
841 p_143020_1_ par1World 2
842 p_143020_2_ par2NBTTagCompound 2
843 p_143021_1_ par1 2
844 p_143021_2_ par2 2
845 p_143022_1_ par1NBTTagCompound 2
846 p_143026_1_ par1 2
847 p_143026_2_ par2 2
848 p_143026_3_ par3StructureStart 2
849 p_143027_1_ par1World 2
850 p_143028_1_ par1 2
851 p_143028_2_ par2 2
852 p_143028_3_ par3 2
853 p_143030_1_ par1 2
854 p_143030_2_ par2 2
855 p_143030_3_ par3 2
856 p_143031_0_ par0Class 2
857 p_143031_1_ par1Str 2
858 p_143032_0_ par0NBTTagCompound 2
859 p_143032_1_ par1World 2
860 p_143033_0_ par0StructureStart 2
861 p_143034_0_ par0Class 2
862 p_143034_1_ par1Str 2
863 p_143035_0_ par0NBTTagCompound 2
864 p_143035_1_ par1World 2
865 p_143036_0_ par0StructureComponent 2
866 p_143042_1_ par1 2
867 p_143042_2_ par2 2
868 p_143043_1_ par1NBTTagCompound 2
869 p_143043_2_ par2 2
870 p_143043_3_ par3 2
871 p_143047_1_ par1Str 2
872 p_70000_1_ par1PlayerUsageSnooper 2
873 p_70001_1_ par1PlayerUsageSnooper 2
874 p_70003_1_ par1 2
875 p_70003_2_ par2Str 2
876 p_70006_1_ par1ChatMessageComponent 2
877 p_70011_1_ par1 2
878 p_70011_3_ par3 2
879 p_70011_5_ par5 2
1151 p_70691_1_ par1 2
1152 p_70693_1_ par1EntityPlayer 2
1153 p_70695_1_ par1PotionEffect 2
1154 p_70695_2_ par2 2
1155 p_70778_1_ par1PathEntity 2
1156 p_70783_1_ par1 2
1157 p_70783_2_ par2 2
1269 p_71019_2_ par2 2
1270 p_71020_1_ par1 2
1271 p_71021_1_ par1ItemStack 2
p_71022_1_ par1EntityLivingBase 2
p_71022_2_ par2 2
1272 p_71023_1_ par1 2
1273 p_71027_1_ par1 2
1274 p_71029_1_ par1StatBase 2
3039 p_73049_4_ par4 2
3040 p_73049_5_ par5 2
3041 p_73049_6_ par6 2
p_73050_1_ par1Entity 2
p_73050_2_ par2 2
3042 p_73052_1_ par1WorldSettings 2
3043 p_73057_1_ par1EnumCreatureType 2
3044 p_73057_2_ par2 2
3392 p_74017_0_ par0ServerData 2
3393 p_74019_0_ par0GuiMultiplayer 2
3394 p_74020_0_ par0GuiMultiplayer 2
3395 p_74042_0_ par0GuiLanguage 2
3396 p_74043_0_ par0GuiLanguage 2
3397 p_74059_0_ par0GuiSelectWorld 2
3398 p_74061_0_ par0GuiScreen 2
3399 p_74061_1_ par1Str 2
4972 p_76356_0_ par0Entity 2
4973 p_76356_1_ par1Entity 2
4974 p_76358_0_ par0EntityLivingBase 2
4975 p_76360_1_ par1EntityLivingBase 2
4976 p_76362_0_ par0EntityFireball 2
4977 p_76362_1_ par1Entity 2
4978 p_76365_0_ par0EntityPlayer 2
5489 p_77014_6_ par6 2
5490 p_77014_8_ par8 2
5491 p_77014_9_ par9 2
5492 p_77015_1_ par1FontRenderer 2
5493 p_77015_2_ par2TextureManager 2
5494 p_77015_3_ par3ItemStack 2
5495 p_77015_4_ par4 2
5496 p_77015_5_ par5 2
5497 p_77017_1_ par1Tessellator 2
5498 p_77017_2_ par2 2
5499 p_77017_3_ par3 2
5512 p_77020_5_ par5 2
5513 p_77020_6_ par6 2
5514 p_77020_7_ par7 2
5515 p_77021_1_ par1FontRenderer 2
5516 p_77021_2_ par2TextureManager 2
5517 p_77021_3_ par3ItemStack 2
5518 p_77021_4_ par4 2
5519 p_77021_5_ par5 2
5520 p_77026_1_ par1Tessellator 2
5521 p_77026_2_ par2Icon 2
5522 p_77028_1_ par1EntityLightningBolt 2
5539 p_77032_1_ par1EntityLivingBase 2
5540 p_77032_2_ par2 2
5541 p_77032_3_ par3 2
5542 p_77033_1_ par1EntityLivingBase 2
5543 p_77033_2_ par2 2
5544 p_77033_4_ par4 2
5545 p_77033_6_ par6 2
5546 p_77034_1_ par1 2
5547 p_77034_2_ par2 2
5548 p_77034_3_ par3 2
5693 p_77099_1_ par1EntityPig 2
5694 p_77099_2_ par2 2
5695 p_77099_3_ par3 2
5696 p_77100_1_ par1EntityLivingBase par1AbstractClientPlayer 2
5697 p_77100_2_ par2 2
5698 p_77101_1_ par1EntityLivingBase 2
5699 p_77101_2_ par2 2
5701 p_77101_6_ par6 2
5702 p_77101_8_ par8 2
5703 p_77101_9_ par9 2
5704 p_77102_1_ par1EntityLivingBase par1AbstractClientPlayer 2
5705 p_77102_2_ par2 2
5706 p_77102_3_ par3 2
5707 p_77102_4_ par4 2
5708 p_77104_1_ par1AbstractClientPlayer 2
5709 p_77104_2_ par2 2
5710 p_77105_1_ par1EntityLivingBase par1AbstractClientPlayer 2
5711 p_77105_2_ par2 2
5712 p_77105_4_ par4 2
5713 p_77105_6_ par6 2
5714 p_77107_1_ par1EntityLivingBase par1AbstractClientPlayer 2
5715 p_77107_2_ par2 2
5716 p_77107_3_ par3 2
5717 p_77113_1_ par1EntitySheep 2
5818 p_77216_1_ par1 2
5819 p_77218_1_ par1 2
5820 p_77219_1_ par1GuiButton 2
5821 p_77220_1_ par1 2
5822 p_77220_2_ par2 2
5823 p_77222_1_ par1 2
5824 p_77222_2_ par2 2
5825 p_77222_3_ par3Tessellator 2
6328 p_78280_2_ par2 2
6329 p_78282_0_ par0Str 2
6330 p_78283_1_ par1Str 2
6331 p_78319_1_ par1EntityPlayer 2
6332 p_78319_2_ par2TextureManager 2
6333 p_78319_3_ par3MapData 2
6334 p_78334_1_ par1StatCrafting 2
6335 p_78334_2_ par2StatCrafting 2
6336 p_78337_1_ par1StatCrafting 2
7111 p_82404_6_ par6 2
7112 p_82404_8_ par8 2
7113 p_82404_9_ par9 2
7114 p_82408_1_ p_82406_1_ par1EntityLiving par1FontRenderer 2
7115 p_82406_2_ par2TextureManager 2
7116 p_82406_3_ par3ItemStack 2
7117 p_82406_4_ par4 2
7118 p_82406_5_ par5 2
7119 p_82408_1_ par1EntityLivingBase 2
7120 p_82408_2_ par2 2
7121 p_82408_3_ par3 2
7122 p_82409_1_ par1EntityWitch 2
7480 p_82846_1_ par1EntityPlayer 2
7481 p_82846_2_ par2 2
7482 p_82847_1_ par1ICrafting 2
7483 p_82849_0_ par0ContainerRepair 2
7484 p_82850_1_ par1Str 2
7485 p_82851_0_ par0ContainerRepair 2
7486 p_82869_1_ par1EntityPlayer 2
7487 p_82870_1_ par1EntityPlayer 2
7488 p_82870_2_ par2ItemStack 2
7676 p_92045_1_ par1 2
7677 p_92046_1_ par1 2
7678 p_92058_1_ par1ItemStack 2
7679 p_92062_1_ par1ChatMessageComponent 2
7680 p_92070_1_ par1Str 2
7681 p_92070_2_ par2 2
7682 p_92070_3_ par3 2
7786 p_94146_2_ par2 2
7787 p_94146_3_ par3Block 2
7788 p_94146_4_ par4 2
7789 p_94148_1_ par1FontRenderer 2
7790 p_94148_2_ par2TextureManager 2
7791 p_94148_3_ par3ItemStack 2
7792 p_94148_4_ par4 2
7793 p_94148_5_ par5 2
7794 p_94148_6_ par6Str 2
7795 p_94149_1_ par1 2
7796 p_94149_2_ par2 2
7797 p_94149_3_ par3Icon 2
8052 p_96095_2_ par2 2
8053 p_96095_3_ par3 2
8054 p_96095_4_ par4 2
8055 p_96098_1_ par1ItemStack 2
8056 p_96099_1_ par1 2
8057 p_96102_1_ par1 2
8058 p_96104_1_ par1Str 2
8247 p_96449_6_ par6 2
8248 p_96449_8_ par8Str 2
8249 p_96449_9_ par9 2
8250 p_96450_10_ par10 2
8251 p_96450_1_ par1AbstractClientPlayer 2
8252 p_96450_2_ par2 2
8253 p_96450_4_ par4 2
8254 p_96450_6_ par6 2
8255 p_96450_8_ par8Str 2
8256 p_96450_9_ par9 2
8257 p_96456_1_ par1ServerScoreboard 2
8258 p_96456_2_ par2EntityPlayerMP 2
8259 p_96457_1_ par1EntityPlayer 2
8375 p_96662_1_ par1Str 2
8376 p_96664_1_ par1Str 2
8377 p_96666_1_ par1Str 2
8378 p_96667_0_ par0ScorePlayerTeam par0Team 2
8379 p_96667_1_ par1Str 2
8380 p_96681_1_ par1Str 2
8381 p_98034_1_ par1EntityPlayer 2
8433 p_98235_2_ par2Throwable 2
8434 p_98236_1_ par1Str 2
8435 p_98237_0_ par0LogAgent 2
8436 p_98247_0_ par0McoServerList 2
8437 p_98247_1_ par1List 2
8438 p_98249_0_ par0McoServerList 2
8439 p_98263_1_ par1 2
8440 p_98263_2_ par2 2
8441 p_98263_3_ par3 2
9296 p_i1279_2_ par2 2
9297 p_i1279_3_ par3 2
9298 p_i1279_4_ par4 2
p_i1280_1_ par1StitchHolder 2
9299 p_i1281_1_ par1 2
9300 p_i1281_2_ par2Str 2
9301 p_i1282_1_ par1Str 2
10089 p_i1609_2_ par2 2
10090 p_i1609_4_ par4 2
10091 p_i1609_6_ par6 2
p_i1610_1_ par1Attribute 2
10092 p_i1611_1_ par1EntityLivingBase 2
10093 p_i1612_1_ par1EntityLiving 2
10094 p_i1613_1_ par1EntityLiving 2
10147 p_i1638_1_ par1EntityCreature 2
10148 p_i1638_2_ par2 2
10149 p_i1638_4_ par4 2
p_i1639_1_ par1EntityCreature 2
p_i1639_2_ par2 2
10150 p_i1640_1_ par1EntityCreature 2
10151 p_i1640_2_ par2 2
10152 p_i1640_4_ par4 2
11687 p_i2330_1_ par1 2
11688 p_i2330_2_ par2Str 2
11689 p_i2330_3_ par3 2
11690 p_i2331_1_ p_i2341_1_ par1DedicatedServer par1Minecraft 2
11691 p_i2332_1_ p_i2342_1_ par1DedicatedServer par1WorldClient 2
11692 p_i2333_1_ p_i2343_1_ par1DedicatedServer par1WorldClient 2
11693 p_i2334_1_ p_i2344_1_ par1MinecraftServerGui par1StitchHolder 2
11694 p_i2334_2_ p_i2344_2_ par2JTextField par2Str 2
11695 p_i2335_1_ p_i2345_1_ par1MinecraftServerGui par1 2
11696 p_i2336_1_ p_i2345_2_ par1MinecraftServer par2 2
11697 p_i2337_1_ p_i2345_3_ par1MinecraftServer par3 2
11698 p_i2338_1_ p_i2345_4_ par1StatsComponent par4 2
11699 p_i2339_1_ p_i2346_1_ par1JTextArea par1Packet44UpdateAttributes 2
11700 p_i2340_1_ p_i2346_2_ par1TextAreaLogHandler par2Str 2
11701 p_i2346_3_ par3 2
11702 p_i2346_5_ par5Collection 2
11703 p_i2347_1_ par1EntityCreature 2
11704 p_i2347_2_ par2 2
11705 p_i2348_1_ par1EntityZombie 2
11706 p_i2348_2_ par2 2
11707 p_i2348_3_ par3 2
11708 p_i2349_1_ par1EntityZombie 2
11709 p_i2349_2_ par2 2
11710 p_i2349_3_ par3 2
11711 p_i2349_4_ par4EntityZombieINNER1 2
11712 p_i2350_1_ par1 2
11713 p_i2361_1_ par1DedicatedServer 2
11714 p_i2362_1_ par1DedicatedServer 2
11715 p_i2363_1_ par1DedicatedServer 2
11716 p_i2364_1_ par1MinecraftServerGui 2
11717 p_i2364_2_ par2JTextField 2
11718 p_i2365_1_ par1MinecraftServerGui 2
11719 p_i2366_1_ par1MinecraftServer 2
11720 p_i2367_1_ par1MinecraftServer 2
11721 p_i2368_1_ par1StatsComponent 2
11722 p_i2369_1_ par1JTextArea 2
11723 p_i2370_1_ par1TextAreaLogHandler 2
11724 p_i43000_1_ par1ArrayOfInteger 2
11725 p_i43001_1_ par1Str 2
11726 p_i43002_1_ par1 2
11727 p_i43002_2_ par2 2
11728 p_main_0_ par0ArrayOfStr 2
11729 p_openConnection_1_ par1URL 2
11730 p_paint_1_ par1Graphics 2
+36 -71
View File
@@ -1,6 +1,6 @@
diff -r -U 3 minecraft\net\minecraft\src\CallableSuspiciousClasses.java minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java
--- minecraft\net\minecraft\src\CallableSuspiciousClasses.java Sun Jun 30 21:44:00 2013
+++ minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java Sun Jun 30 21:45:42 2013
--- minecraft\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 13:58:48 2013
+++ minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 14:01:01 2013
@@ -21,9 +21,14 @@
public String func_85085_a() throws SecurityException, NoSuchFieldException, IllegalAccessException, IllegalArgumentException {
@@ -29,8 +29,8 @@ diff -r -U 3 minecraft\net\minecraft\src\CallableSuspiciousClasses.java minecraf
}
}
diff -r -U 3 minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java
--- minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java Sun Jun 30 21:44:00 2013
+++ minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Sun Jun 30 21:45:42 2013
--- minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 13:58:48 2013
+++ minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 14:01:01 2013
@@ -11,6 +11,10 @@
public class ComponentStrongholdRightTurn extends ComponentStrongholdLeftTurn {
@@ -43,9 +43,9 @@ diff -r -U 3 minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java minec
if(this.field_74885_f != 2 && this.field_74885_f != 3) {
this.func_74989_b((ComponentStrongholdStairs2)p_74861_1_, p_74861_2_, p_74861_3_, 1, 1);
diff -r -U 3 minecraft\net\minecraft\src\DedicatedServer.java minecraft_patched\net\minecraft\src\DedicatedServer.java
--- minecraft\net\minecraft\src\DedicatedServer.java Sun Jun 30 21:44:01 2013
+++ minecraft_patched\net\minecraft\src\DedicatedServer.java Sun Jun 30 21:45:42 2013
@@ -207,7 +207,7 @@
--- minecraft\net\minecraft\src\DedicatedServer.java Tue Sep 17 13:58:48 2013
+++ minecraft_patched\net\minecraft\src\DedicatedServer.java Tue Sep 17 14:01:01 2013
@@ -208,7 +208,7 @@
System.exit(0);
}
@@ -54,44 +54,9 @@ diff -r -U 3 minecraft\net\minecraft\src\DedicatedServer.java minecraft_patched\
super.func_71190_q();
this.func_71333_ah();
}
diff -r -U 3 minecraft\net\minecraft\src\EntityDragon.java minecraft_patched\net\minecraft\src\EntityDragon.java
--- minecraft\net\minecraft\src\EntityDragon.java Sun Jun 30 21:44:01 2013
+++ minecraft_patched\net\minecraft\src\EntityDragon.java Sun Jun 30 21:45:42 2013
@@ -551,4 +551,14 @@
protected float func_70599_aP() {
return 5.0F;
}
+
+ @Override
+ public float func_70667_aM() {
+ return 0.0f;
+ }
+
+ @Override
+ public float func_110183_aJ() {
+ return 0.0f;
+ }
}
diff -r -U 3 minecraft\net\minecraft\src\EntityWither.java minecraft_patched\net\minecraft\src\EntityWither.java
--- minecraft\net\minecraft\src\EntityWither.java Sun Jun 30 21:44:02 2013
+++ minecraft_patched\net\minecraft\src\EntityWither.java Sun Jun 30 21:45:42 2013
@@ -458,4 +458,13 @@
this.field_70154_o = null;
}
+ @Override
+ public float func_70667_aM() {
+ return 0.0f;
+ }
+
+ @Override
+ public float func_110183_aJ() {
+ return 0.0f;
+ }
}
diff -r -U 3 minecraft\net\minecraft\src\EnumChatFormatting.java minecraft_patched\net\minecraft\src\EnumChatFormatting.java
--- minecraft\net\minecraft\src\EnumChatFormatting.java Sun Jun 30 21:44:02 2013
+++ minecraft_patched\net\minecraft\src\EnumChatFormatting.java Sun Jun 30 21:45:42 2013
--- minecraft\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 13:58:49 2013
+++ minecraft_patched\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 14:01:01 2013
@@ -38,7 +38,7 @@
private final String field_96304_B;
@@ -102,8 +67,8 @@ diff -r -U 3 minecraft\net\minecraft\src\EnumChatFormatting.java minecraft_patch
private EnumChatFormatting(char p_i1337_3_, boolean p_i1337_4_) {
diff -r -U 3 minecraft\net\minecraft\src\FileResourcePack.java minecraft_patched\net\minecraft\src\FileResourcePack.java
--- minecraft\net\minecraft\src\FileResourcePack.java Sun Jun 30 21:44:02 2013
+++ minecraft_patched\net\minecraft\src\FileResourcePack.java Sun Jun 30 21:45:42 2013
--- minecraft\net\minecraft\src\FileResourcePack.java Tue Sep 17 13:58:49 2013
+++ minecraft_patched\net\minecraft\src\FileResourcePack.java Tue Sep 17 14:01:01 2013
@@ -84,12 +84,18 @@
protected void finalize() {
@@ -124,8 +89,8 @@ diff -r -U 3 minecraft\net\minecraft\src\FileResourcePack.java minecraft_patched
}
diff -r -U 3 minecraft\net\minecraft\src\FolderResourcePack.java minecraft_patched\net\minecraft\src\FolderResourcePack.java
--- minecraft\net\minecraft\src\FolderResourcePack.java Sun Jun 30 21:44:02 2013
+++ minecraft_patched\net\minecraft\src\FolderResourcePack.java Sun Jun 30 21:46:52 2013
--- minecraft\net\minecraft\src\FolderResourcePack.java Tue Sep 17 13:58:49 2013
+++ minecraft_patched\net\minecraft\src\FolderResourcePack.java Tue Sep 17 14:01:01 2013
@@ -29,7 +29,7 @@
HashSet var1 = Sets.newHashSet();
File var2 = new File(this.field_110597_b, "assets/");
@@ -136,9 +101,9 @@ diff -r -U 3 minecraft\net\minecraft\src\FolderResourcePack.java minecraft_patch
for(int var5 = 0; var5 < var4; ++var5) {
diff -r -U 3 minecraft\net\minecraft\src\FontRenderer.java minecraft_patched\net\minecraft\src\FontRenderer.java
--- minecraft\net\minecraft\src\FontRenderer.java Sun Jun 30 21:44:02 2013
+++ minecraft_patched\net\minecraft\src\FontRenderer.java Sun Jun 30 21:45:42 2013
@@ -625,8 +625,6 @@
--- minecraft\net\minecraft\src\FontRenderer.java Tue Sep 17 13:58:49 2013
+++ minecraft_patched\net\minecraft\src\FontRenderer.java Tue Sep 17 14:01:01 2013
@@ -630,8 +630,6 @@
case 10:
--var5;
break;
@@ -147,7 +112,7 @@ diff -r -U 3 minecraft\net\minecraft\src\FontRenderer.java minecraft_patched\net
case 167:
if(var5 < var3 - 1) {
++var5;
@@ -640,6 +638,8 @@
@@ -645,6 +643,8 @@
}
}
break;
@@ -157,8 +122,8 @@ diff -r -U 3 minecraft\net\minecraft\src\FontRenderer.java minecraft_patched\net
var4 += this.func_78263_a(var8);
if(var7) {
diff -r -U 3 minecraft\net\minecraft\src\IntegratedServer.java minecraft_patched\net\minecraft\src\IntegratedServer.java
--- minecraft\net\minecraft\src\IntegratedServer.java Sun Jun 30 21:44:02 2013
+++ minecraft_patched\net\minecraft\src\IntegratedServer.java Sun Jun 30 21:45:42 2013
--- minecraft\net\minecraft\src\IntegratedServer.java Tue Sep 17 13:58:50 2013
+++ minecraft_patched\net\minecraft\src\IntegratedServer.java Tue Sep 17 14:01:01 2013
@@ -103,7 +103,7 @@
return true;
}
@@ -169,9 +134,9 @@ diff -r -U 3 minecraft\net\minecraft\src\IntegratedServer.java minecraft_patched
this.field_71348_o = this.field_71347_n.func_71752_f();
if(!var1 && this.field_71348_o) {
diff -r -U 3 minecraft\net\minecraft\src\Minecraft.java minecraft_patched\net\minecraft\src\Minecraft.java
--- minecraft\net\minecraft\src\Minecraft.java Sun Jun 30 21:44:05 2013
+++ minecraft_patched\net\minecraft\src\Minecraft.java Sun Jun 30 21:45:42 2013
@@ -599,8 +599,8 @@
--- minecraft\net\minecraft\src\Minecraft.java Tue Sep 17 13:58:50 2013
+++ minecraft_patched\net\minecraft\src\Minecraft.java Tue Sep 17 14:01:01 2013
@@ -604,8 +604,8 @@
return;
}
@@ -182,7 +147,7 @@ diff -r -U 3 minecraft\net\minecraft\src\Minecraft.java minecraft_patched\net\mi
if(this.field_71425_J) {
if(this.field_71434_R && this.field_71433_S != null) {
this.func_71377_b(this.field_71433_S);
@@ -621,23 +621,20 @@
@@ -626,23 +626,20 @@
}
continue;
}
@@ -220,8 +185,8 @@ diff -r -U 3 minecraft\net\minecraft\src\Minecraft.java minecraft_patched\net\mi
}
diff -r -U 3 minecraft\net\minecraft\src\RConThreadClient.java minecraft_patched\net\minecraft\src\RConThreadClient.java
--- minecraft\net\minecraft\src\RConThreadClient.java Sun Jun 30 21:44:05 2013
+++ minecraft_patched\net\minecraft\src\RConThreadClient.java Sun Jun 30 21:45:42 2013
--- minecraft\net\minecraft\src\RConThreadClient.java Tue Sep 17 13:58:51 2013
+++ minecraft_patched\net\minecraft\src\RConThreadClient.java Tue Sep 17 14:01:01 2013
@@ -32,8 +32,8 @@
}
@@ -261,8 +226,8 @@ diff -r -U 3 minecraft\net\minecraft\src\RConThreadClient.java minecraft_patched
private void func_72654_a(int p_72654_1_, int p_72654_2_, String p_72654_3_) throws IOException {
diff -r -U 3 minecraft\net\minecraft\src\RenderBlocks.java minecraft_patched\net\minecraft\src\RenderBlocks.java
--- minecraft\net\minecraft\src\RenderBlocks.java Sun Jun 30 21:44:05 2013
+++ minecraft_patched\net\minecraft\src\RenderBlocks.java Sun Jun 30 21:45:42 2013
--- minecraft\net\minecraft\src\RenderBlocks.java Tue Sep 17 13:58:51 2013
+++ minecraft_patched\net\minecraft\src\RenderBlocks.java Tue Sep 17 14:01:01 2013
@@ -1960,16 +1960,16 @@
float var25 = (float)(p_78589_2_ + 1);
float var26 = (float)(p_78589_4_ + 0);
@@ -294,9 +259,9 @@ diff -r -U 3 minecraft\net\minecraft\src\RenderBlocks.java minecraft_patched\net
var5.func_78374_a((double)var25, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var8.func_94212_f(), (double)var8.func_94206_g());
var5.func_78374_a((double)var24, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var8.func_94209_e(), (double)var8.func_94206_g());
diff -r -U 3 minecraft\net\minecraft\src\RenderGlobal.java minecraft_patched\net\minecraft\src\RenderGlobal.java
--- minecraft\net\minecraft\src\RenderGlobal.java Sun Jun 30 21:44:06 2013
+++ minecraft_patched\net\minecraft\src\RenderGlobal.java Sun Jun 30 21:45:42 2013
@@ -1435,7 +1435,7 @@
--- minecraft\net\minecraft\src\RenderGlobal.java Tue Sep 17 13:58:51 2013
+++ minecraft_patched\net\minecraft\src\RenderGlobal.java Tue Sep 17 14:01:01 2013
@@ -1445,7 +1445,7 @@
double var15 = this.field_72777_q.field_71451_h.field_70165_t - p_72726_2_;
double var17 = this.field_72777_q.field_71451_h.field_70163_u - p_72726_4_;
double var19 = this.field_72777_q.field_71451_h.field_70161_v - p_72726_6_;
@@ -306,8 +271,8 @@ diff -r -U 3 minecraft\net\minecraft\src\RenderGlobal.java minecraft_patched\net
this.field_72777_q.field_71452_i.func_78873_a(var21 = new EntityHugeExplodeFX(this.field_72769_h, p_72726_2_, p_72726_4_, p_72726_6_, p_72726_8_, p_72726_10_, p_72726_12_));
} else if(p_72726_1_.equals("largeexplode")) {
diff -r -U 3 minecraft\net\minecraft\src\SoundPoolURLConnection.java minecraft_patched\net\minecraft\src\SoundPoolURLConnection.java
--- minecraft\net\minecraft\src\SoundPoolURLConnection.java Sun Jun 30 21:44:06 2013
+++ minecraft_patched\net\minecraft\src\SoundPoolURLConnection.java Sun Jun 30 21:45:42 2013
--- minecraft\net\minecraft\src\SoundPoolURLConnection.java Tue Sep 17 13:58:51 2013
+++ minecraft_patched\net\minecraft\src\SoundPoolURLConnection.java Tue Sep 17 14:01:01 2013
@@ -22,7 +22,11 @@
public void connect() {}
@@ -321,8 +286,8 @@ diff -r -U 3 minecraft\net\minecraft\src\SoundPoolURLConnection.java minecraft_p
// $FF: synthetic method
diff -r -U 3 minecraft\net\minecraft\src\TcpMasterThread.java minecraft_patched\net\minecraft\src\TcpMasterThread.java
--- minecraft\net\minecraft\src\TcpMasterThread.java Sun Jun 30 21:44:06 2013
+++ minecraft_patched\net\minecraft\src\TcpMasterThread.java Sun Jun 30 21:45:42 2013
--- minecraft\net\minecraft\src\TcpMasterThread.java Tue Sep 17 13:58:51 2013
+++ minecraft_patched\net\minecraft\src\TcpMasterThread.java Tue Sep 17 14:01:01 2013
@@ -11,6 +11,7 @@
this.field_74504_a = p_i1395_1_;
}
@@ -332,8 +297,8 @@ diff -r -U 3 minecraft\net\minecraft\src\TcpMasterThread.java minecraft_patched\
try {
Thread.sleep(5000L);
diff -r -U 3 minecraft\net\minecraft\src\ThreadedFileIOBase.java minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java
--- minecraft\net\minecraft\src\ThreadedFileIOBase.java Sun Jun 30 21:44:06 2013
+++ minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java Sun Jun 30 21:45:42 2013
--- minecraft\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 13:58:52 2013
+++ minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 14:01:01 2013
@@ -20,6 +20,7 @@
}
+17 -17
View File
@@ -1,6 +1,6 @@
diff -r -U 3 minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java
--- minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java Sun Jun 30 21:45:24 2013
+++ minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java Sun Jun 30 21:45:41 2013
--- minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 14:00:13 2013
+++ minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 14:01:07 2013
@@ -21,9 +21,14 @@
public String func_85085_a() throws SecurityException, NoSuchFieldException, IllegalAccessException, IllegalArgumentException {
@@ -30,8 +30,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java m
}
}
diff -r -U 3 minecraft_server\net\minecraft\src\ComponentStrongholdRightTurn.java minecraft_server_patched\net\minecraft\src\ComponentStrongholdRightTurn.java
--- minecraft_server\net\minecraft\src\ComponentStrongholdRightTurn.java Sun Jun 30 21:45:25 2013
+++ minecraft_server_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Sun Jun 30 21:45:41 2013
--- minecraft_server\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 14:00:14 2013
+++ minecraft_server_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 14:01:07 2013
@@ -11,6 +11,10 @@
public class ComponentStrongholdRightTurn extends ComponentStrongholdLeftTurn {
@@ -44,9 +44,9 @@ diff -r -U 3 minecraft_server\net\minecraft\src\ComponentStrongholdRightTurn.jav
if(this.field_74885_f != 2 && this.field_74885_f != 3) {
this.func_74989_b((ComponentStrongholdStairs2)p_74861_1_, p_74861_2_, p_74861_3_, 1, 1);
diff -r -U 3 minecraft_server\net\minecraft\src\DedicatedServer.java minecraft_server_patched\net\minecraft\src\DedicatedServer.java
--- minecraft_server\net\minecraft\src\DedicatedServer.java Sun Jun 30 21:45:25 2013
+++ minecraft_server_patched\net\minecraft\src\DedicatedServer.java Sun Jun 30 21:45:41 2013
@@ -208,7 +208,7 @@
--- minecraft_server\net\minecraft\src\DedicatedServer.java Tue Sep 17 14:00:14 2013
+++ minecraft_server_patched\net\minecraft\src\DedicatedServer.java Tue Sep 17 14:01:07 2013
@@ -209,7 +209,7 @@
System.exit(0);
}
@@ -56,8 +56,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\DedicatedServer.java minecraft_s
this.func_71333_ah();
}
diff -r -U 3 minecraft_server\net\minecraft\src\EnumChatFormatting.java minecraft_server_patched\net\minecraft\src\EnumChatFormatting.java
--- minecraft_server\net\minecraft\src\EnumChatFormatting.java Sun Jun 30 21:45:26 2013
+++ minecraft_server_patched\net\minecraft\src\EnumChatFormatting.java Sun Jun 30 21:45:41 2013
--- minecraft_server\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 14:00:14 2013
+++ minecraft_server_patched\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 14:01:07 2013
@@ -38,7 +38,7 @@
private final String field_96304_B;
@@ -68,8 +68,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\EnumChatFormatting.java minecraf
private EnumChatFormatting(char p_i1337_3_, boolean p_i1337_4_) {
diff -r -U 3 minecraft_server\net\minecraft\src\MemoryConnection.java minecraft_server_patched\net\minecraft\src\MemoryConnection.java
--- minecraft_server\net\minecraft\src\MemoryConnection.java Sun Jun 30 21:45:26 2013
+++ minecraft_server_patched\net\minecraft\src\MemoryConnection.java Sun Jun 30 21:45:41 2013
--- minecraft_server\net\minecraft\src\MemoryConnection.java Tue Sep 17 14:00:15 2013
+++ minecraft_server_patched\net\minecraft\src\MemoryConnection.java Tue Sep 17 14:01:07 2013
@@ -11,13 +11,18 @@
public class MemoryConnection implements INetworkManager {
@@ -91,8 +91,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\MemoryConnection.java minecraft_
public void func_74425_a(NetHandler p_74425_1_) {
this.field_74440_d = p_74425_1_;
diff -r -U 3 minecraft_server\net\minecraft\src\RConThreadClient.java minecraft_server_patched\net\minecraft\src\RConThreadClient.java
--- minecraft_server\net\minecraft\src\RConThreadClient.java Sun Jun 30 21:45:26 2013
+++ minecraft_server_patched\net\minecraft\src\RConThreadClient.java Sun Jun 30 21:45:41 2013
--- minecraft_server\net\minecraft\src\RConThreadClient.java Tue Sep 17 14:00:15 2013
+++ minecraft_server_patched\net\minecraft\src\RConThreadClient.java Tue Sep 17 14:01:07 2013
@@ -32,8 +32,8 @@
}
@@ -132,8 +132,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\RConThreadClient.java minecraft_
private void func_72654_a(int p_72654_1_, int p_72654_2_, String p_72654_3_) throws IOException {
diff -r -U 3 minecraft_server\net\minecraft\src\TcpMasterThread.java minecraft_server_patched\net\minecraft\src\TcpMasterThread.java
--- minecraft_server\net\minecraft\src\TcpMasterThread.java Sun Jun 30 21:45:27 2013
+++ minecraft_server_patched\net\minecraft\src\TcpMasterThread.java Sun Jun 30 21:45:41 2013
--- minecraft_server\net\minecraft\src\TcpMasterThread.java Tue Sep 17 14:00:16 2013
+++ minecraft_server_patched\net\minecraft\src\TcpMasterThread.java Tue Sep 17 14:01:07 2013
@@ -11,6 +11,7 @@
this.field_74504_a = p_i1395_1_;
}
@@ -143,8 +143,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\TcpMasterThread.java minecraft_s
try {
Thread.sleep(5000L);
diff -r -U 3 minecraft_server\net\minecraft\src\ThreadedFileIOBase.java minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java
--- minecraft_server\net\minecraft\src\ThreadedFileIOBase.java Sun Jun 30 21:45:27 2013
+++ minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java Sun Jun 30 21:45:41 2013
--- minecraft_server\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 14:00:16 2013
+++ minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 14:01:07 2013
@@ -20,6 +20,7 @@
}
+3 -3
View File
@@ -1,4 +1,4 @@
[VERSION]
MCPVersion = 8.02
ClientVersion = 1.6.1
ServerVersion = 1.6.1
MCPVersion = 8.09
ClientVersion = 1.6.3
ServerVersion = 1.6.3
Binary file not shown.
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/Minecraft/src/Start.java"/>
<listEntry value="/Minecraft/lib/net/minecraft/launchwrapper/1.3/launchwrapper-1.3.jar"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="Start"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="net.minecraft.launchwrapper.Launch"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--version 1.6 --tweakClass cpw.mods.fml.common.launcher.FMLTweaker"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Minecraft"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xincgc -Xmx1024M -Xms1024M"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:Minecraft/jars}"/>
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/Minecraft/common/net/minecraft/server/MinecraftServer.java"/>
<listEntry value="/Minecraft/src/net/minecraft/server/MinecraftServer.java"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="net.minecraft.server.MinecraftServer"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="cpw.mods.fml.relauncher.ServerLaunchWrapper"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Minecraft"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xincgc -Xmx1024M -Xms1024M"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:Minecraft/jars}"/>
+10 -17
View File
@@ -3,9 +3,14 @@
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="lib" path="jars/libraries/org/ow2/asm/asm-all/4.1/asm-all-4.1.jar" sourcepath="jars/libraries/org/ow2/asm/asm-all/4.1/asm-all-4.1-sources.jar"/>
<classpathentry kind="lib" path="jars/libraries/org/ow2/asm/asm-debug-all/4.1/asm-debug-all-4.1.jar" sourcepath="jars/libraries/org/ow2/asm/asm-debug-all/4.1/asm-debug-all-4.1-sources.jar"/>
<classpathentry kind="lib" path="jars/libraries/net/minecraft/launchwrapper/1.3/launchwrapper-1.3.jar"/>
<classpathentry kind="lib" path="jars/versions/1.6/1.6.jar"/>
<classpathentry kind="lib" path="jars/versions/1.6.2/1.6.2.jar">
<attributes>
<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="Minecraft/jars/versions/1.6.2/1.6.2-natives"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="jars/libraries/lzma/lzma/0.0.1/lzma-0.0.1.jar"/>
<classpathentry kind="lib" path="jars/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5.jar" sourcepath="jars/libraries/net/sf/jopt-simple/jopt-simple/4.5/jopt-simple-4.5-sources.jar"/>
<classpathentry kind="lib" path="jars/libraries/com/paulscode/codecjorbis/20101023/codecjorbis-20101023.jar"/>
<classpathentry kind="lib" path="jars/libraries/com/paulscode/codecwav/20101023/codecwav-20101023.jar"/>
@@ -19,19 +24,7 @@
<classpathentry kind="lib" path="jars/libraries/commons-io/commons-io/2.4/commons-io-2.4.jar" sourcepath="jars/libraries/commons-io/commons-io/2.4/commons-io-2.4-sources.jar"/>
<classpathentry kind="lib" path="jars/libraries/net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar" sourcepath="jars/libraries/net/java/jutils/jutils/1.0.0/jutils-1.0.0-sources.jar"/>
<classpathentry kind="lib" path="jars/libraries/com/google/code/gson/gson/2.2.2/gson-2.2.2.jar" sourcepath="jars/libraries/com/google/code/gson/gson/2.2.2/gson-2.2.2-sources.jar"/>
<classpathentry kind="lib" path="jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar" sourcepath="jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5-sources.jar">
<attributes>
<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="Minecraft/natives"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar" sourcepath="jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0-sources.jar">
<attributes>
<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="Minecraft/natives"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="jars/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.0/lwjgl_util-2.9.0.jar" sourcepath="jars/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.0/lwjgl_util-2.9.0-sources.jar">
<attributes>
<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="Minecraft/natives"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar" sourcepath="jars/libraries/net/java/jinput/jinput/2.0.5/jinput-2.0.5-sources.jar"/>
<classpathentry kind="lib" path="jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0.jar" sourcepath="jars/libraries/org/lwjgl/lwjgl/lwjgl/2.9.0/lwjgl-2.9.0-sources.jar"/>
<classpathentry kind="lib" path="jars/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.0/lwjgl_util-2.9.0.jar" sourcepath="jars/libraries/org/lwjgl/lwjgl/lwjgl_util/2.9.0/lwjgl_util-2.9.0-sources.jar"/>
</classpath>
-14
View File
@@ -30,11 +30,6 @@
<type>2</type>
<locationURI>MCP_LOC/lib</locationURI>
</link>
<link>
<name>natives</name>
<type>2</type>
<locationURI>MCP_LOC/jars/libraries/natives</locationURI>
</link>
</linkedResources>
<filteredResources>
<filter>
@@ -73,15 +68,6 @@
<arguments>1.0-name-matches-false-false-*.jar</arguments>
</matcher>
</filter>
<filter>
<id>1307293480435</id>
<name>jars/bin/natives</name>
<type>6</type>
<matcher>
<id>org.eclipse.ui.ide.multiFilter</id>
<arguments>1.0-name-matches-false-false-*</arguments>
</matcher>
</filter>
</filteredResources>
<variableList>
<variable>
+7 -6
View File
@@ -75,7 +75,7 @@ def read_mc_versions(fml_dir, version=None, work_dir=None):
mc_info['version'] = version
if not 'client_url' in mc_info.keys():
mc_info['new_launcher'] = True
base_url = 'https://s3.amazonaws.com/Minecraft.Download/versions/%s' % version
base_url = 'http://s3.amazonaws.com/Minecraft.Download/versions/%s' % version
mc_info['client_url'] = '%s/%s.jar' % (base_url, version)
mc_info['json_url'] = '%s/%s.json' % (base_url, version)
mc_info['server_url'] = '%s/minecraft_server.%s.jar' % (base_url, version)
@@ -506,7 +506,7 @@ def copytree(src, dst, verbose=0, symlinks=False):
#==========================================================================
# MCP Related Functions
#==========================================================================
def download_mcp(mcp_dir, fml_dir, version=None):
def download_mcp(fml_dir, mcp_dir, version=None):
if os.path.isfile(os.path.join(mcp_dir, 'runtime', 'commands.py')):
print 'MCP Detected already, not downloading'
return True
@@ -517,6 +517,7 @@ def download_mcp(mcp_dir, fml_dir, version=None):
mc_info = read_mc_versions(fml_dir, version=version)
print('Checking MCP zip (may take time to download)')
if not download_file(mc_info['mcp_url'], mc_info['mcp_file'], mc_info['mcp_md5']):
sys.exit(1)
@@ -922,7 +923,7 @@ def decompile_minecraft(fml_dir, mcp_dir, disable_at=False, disable_merge=False,
src_dir = os.path.join(mcp_dir, 'src')
if os.path.isdir(src_dir):
os.chdir(mcp_dir)
cleanup(None, False)
cleanup(None, False, False)
reset_logger()
os.chdir(fml_dir)
@@ -1145,7 +1146,7 @@ def download_libraries(mcp_dir, libraries, natives_dir):
# This list should be in the format of the new launcher's version.json file
# Under the entry 'libraries'
lib_dir = os.path.join(mcp_dir, 'jars', 'libraries')
default_url = 'https://s3.amazonaws.com/Minecraft.Download/libraries'
default_url = 'http://s3.amazonaws.com/Minecraft.Download/libraries'
downloads = []
failed = False
@@ -1238,7 +1239,7 @@ def download_list(list, natives_dir):
def download_assets(mcp_dir):
from xml.dom.minidom import parse
asset_dir = os.path.join(mcp_dir, 'jars', 'assets')
base_url = 'https://s3.amazonaws.com/Minecraft.Resources'
base_url = 'http://s3.amazonaws.com/Minecraft.Resources'
print('Gathering assets list from %s' % base_url)
@@ -1285,7 +1286,7 @@ def download_assets(mcp_dir):
if failed:
print(' Downloading assets failed, please review log for more details')
sys.exit(1)
#==========================================================================
# Transformers
#==========================================================================
+4 -3
View File
@@ -1,10 +1,11 @@
import os, os.path, sys
from optparse import OptionParser
from fml import setup_fml, finish_setup_fml, apply_fml_patches, setup_mcp, download_mcp
def fml_main(fml_dir, mcp_dir, gen_conf=True, disable_patches=False, disable_at=False, disable_merge=False, enable_server=False,
disable_client=False, disable_rename=False, disable_assets=False, decompile=False):
sys.path.append(fml_dir)
from fml import download_mcp, setup_mcp, decompile_minecraft, apply_fml_patches, finish_setup_fml
print '================ Forge ModLoader Setup Start ==================='
download_mcp(fml_dir, mcp_dir)
setup_mcp(fml_dir, mcp_dir, gen_conf)
@@ -30,7 +31,7 @@ if __name__ == '__main__':
parser.add_option('-c', '--no-client', action="store_true", dest='no_client', help='Disable decompilation of server', default=False)
parser.add_option('-e', '--no-merge', action="store_true", dest='no_merge', help='Disable merging server code into client', default=False)
parser.add_option('-n', '--no-rename', action="store_true", dest='no_rename', help='Disable running updatenames', default=False)
parser.add_option('-a', '--no-assets', action="store_true", dest='no_assets', help='Disable downloading of assets folder', default=False)
parser.add_option( '--no-assets', action="store_true", dest='no_assets', help='Disable downloading of assets folder', default=False)
parser.add_option('-d', '--decompile', action="store_true", dest='decompile', help='Decompile minecraft and apply patches', default=True)
options, _ = parser.parse_args()
@@ -51,5 +52,5 @@ if __name__ == '__main__':
fml_main(fml_dir, mcp_dir, disable_patches=options.no_patch,
disable_at=options.no_access, disable_merge=options.no_merge,
enable_server=options.enable_server, disable_client=options.no_client,
disable_rename=options.no_rename, disable_assets=options.assets,
disable_rename=options.no_rename, disable_assets=options.no_assets,
decompile=options.decompile, gen_conf=False)
+1 -1
View File
@@ -1,2 +1,2 @@
#!/bin/bash
python install.py
python install.py "$@"
+14 -2
View File
@@ -4,7 +4,7 @@
"releaseTime": "{timestamp}",
"type": "release",
"processArguments": "username_session_version",
"minecraftArguments": "--username ${auth_player_name} --session ${auth_session} --version ${version_name} --gameDir ${game_directory} --assetsDir ${game_assets} --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
"minecraftArguments": "--version FML_DEV --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
"minimumLauncherVersion": 2,
"libraries": [
{
@@ -17,6 +17,18 @@
"url" : "http://repo.maven.apache.org/maven2",
"comment" : "Important for FML, we add this"
},
{
"name": "org.scala-lang:scala-library:2.10.2",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2",
"comment" : "Important for FML, we add this"
},
{
"name": "org.scala-lang:scala-compiler:2.10.2",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2",
"comment" : "Important for FML, we add this"
},
{
"name": "net.sf.jopt-simple:jopt-simple:4.5",
"children" : ["sources"],
@@ -121,5 +133,5 @@
}
}
],
"mainClass": "net.minecraft.client.main.Main"
"mainClass": "net.minecraft.launchwrapper.Launch"
}
+123 -89
View File
@@ -1,93 +1,127 @@
{
"id": "FML{version}",
"time": "{timestamp}",
"releaseTime": "{timestamp}",
"type": "release",
"processArguments": "username_session_version",
"minecraftArguments": "--username ${auth_player_name} --session ${auth_session} --version ${version_name} --gameDir ${game_directory} --assetsDir ${game_assets} --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
"minimumLauncherVersion": 2,
"libraries": [
{
"name": "cpw.mods:fml:{version}",
"devdl" : "false"
},
{
"name": "net.minecraft:launchwrapper:1.3"
},
{
"name": "net.sf.jopt-simple:jopt-simple:4.5"
},
{
"name": "com.paulscode:codecjorbis:20101023"
},
{
"name": "com.paulscode:codecwav:20101023"
},
{
"name": "com.paulscode:libraryjavasound:20101123"
},
{
"name": "com.paulscode:librarylwjglopenal:20100824"
},
{
"name": "com.paulscode:soundsystem:20120107"
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0"
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0"
},
{
"name": "argo:argo:2.25_fixed"
},
{
"name": "org.bouncycastle:bcprov-jdk15on:1.47"
},
{
"name": "com.google.guava:guava:14.0"
},
{
"name": "org.apache.commons:commons-lang3:3.1"
},
{
"name": "commons-io:commons-io:2.4"
},
{
"name": "net.java.jinput:jinput:2.0.5"
},
{
"name": "net.java.jutils:jutils:1.0.0"
},
{
"name": "com.google.code.gson:gson:2.2.2"
},
{
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
"install": {
"profileName": "FML",
"target":"FML@version@",
"path":"cpw.mods:fml:@version@",
"version":"FML @version@",
"filePath":"@universal_jar@",
"welcome":"Welcome to the simple FML installer.",
"minecraft":"@minecraft_version@",
"logo":"/big_logo.png"
},
"versionInfo": {
"id": "FML@version@",
"time": "@timestamp@",
"releaseTime": "1960-01-01T00:00:00-0700",
"type": "release",
"processArguments": "username_session_version",
"minecraftArguments": "--username ${auth_player_name} --session ${auth_session} --version ${version_name} --gameDir ${game_directory} --assetsDir ${game_assets} --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
"minimumLauncherVersion": 2,
"libraries": [
{
"name": "cpw.mods:fml:@version@",
"url": "http://files.minecraftforge.net/maven/"
},
"extract": {
"exclude": [
"META-INF/"
]
}
},
{
"name": "net.java.jinput:jinput-platform:2.0.5",
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
{
"name": "net.minecraft:launchwrapper:1.3",
"serverreq":true
},
"extract": {
"exclude": [
"META-INF/"
]
{
"name": "org.scala-lang:scala-library:2.10.2",
"url" : "http://repo.maven.apache.org/maven2/",
"comment" : "Important for FML, we add this",
"serverreq":true
},
{
"name": "org.scala-lang:scala-compiler:2.10.2",
"url" : "http://repo.maven.apache.org/maven2/",
"comment" : "Important for FML, we add this",
"serverreq":true
},
{
"name": "org.ow2.asm:asm-all:4.1",
"serverreq":true
},
{
"name": "net.sf.jopt-simple:jopt-simple:4.5",
"serverreq":true
},
{
"name": "lzma:lzma:0.0.1",
"serverreq":true
},
{
"name": "com.paulscode:codecjorbis:20101023"
},
{
"name": "com.paulscode:codecwav:20101023"
},
{
"name": "com.paulscode:libraryjavasound:20101123"
},
{
"name": "com.paulscode:librarylwjglopenal:20100824"
},
{
"name": "com.paulscode:soundsystem:20120107"
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0"
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0"
},
{
"name": "argo:argo:2.25_fixed"
},
{
"name": "org.bouncycastle:bcprov-jdk15on:1.47"
},
{
"name": "com.google.guava:guava:14.0"
},
{
"name": "org.apache.commons:commons-lang3:3.1"
},
{
"name": "commons-io:commons-io:2.4"
},
{
"name": "net.java.jinput:jinput:2.0.5"
},
{
"name": "net.java.jutils:jutils:1.0.0"
},
{
"name": "com.google.code.gson:gson:2.2.2"
},
{
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
},
{
"name": "net.java.jinput:jinput-platform:2.0.5",
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
}
}
],
"mainClass": "net.minecraft.client.main.Main"
}
],
"mainClass": "net.minecraft.launchwrapper.Launch"
}
}
+137
View File
@@ -0,0 +1,137 @@
{
"id": "FML{version}",
"time": "{timestamp}",
"releaseTime": "{timestamp}",
"type": "release",
"processArguments": "username_session_version",
"minecraftArguments": "--version FML_DEV --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
"minimumLauncherVersion": 2,
"libraries": [
{
"name": "net.minecraft:launchwrapper:1.3",
"comment" : "Important for FML, we add this"
},
{
"name": "org.ow2.asm:asm-debug-all:4.1",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2",
"comment" : "Important for FML, we add this"
},
{
"name": "org.scala-lang:scala-library:2.10.2",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2",
"comment" : "Important for FML, we add this"
},
{
"name": "org.scala-lang:scala-compiler:2.10.2",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2",
"comment" : "Important for FML, we add this"
},
{
"name": "net.sf.jopt-simple:jopt-simple:4.5",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "lzma:lzma:0.0.1"
},
{
"name": "com.paulscode:codecjorbis:20101023"
},
{
"name": "com.paulscode:codecwav:20101023"
},
{
"name": "com.paulscode:libraryjavasound:20101123"
},
{
"name": "com.paulscode:librarylwjglopenal:20100824"
},
{
"name": "com.paulscode:soundsystem:20120107"
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "argo:argo:2.25_fixed"
},
{
"name": "net.sourceforge.argo:argo:2.25",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2",
"comment" : "grumble grumble grumble, y u no use proper version/artifact id grumble"
},
{
"name": "org.bouncycastle:bcprov-jdk15on:1.47",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "com.google.guava:guava:14.0",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "org.apache.commons:commons-lang3:3.1",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "commons-io:commons-io:2.4",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "net.java.jinput:jinput:2.0.5",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "net.java.jutils:jutils:1.0.0",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "com.google.code.gson:gson:2.2.2",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
},
{
"name": "net.java.jinput:jinput-platform:2.0.5",
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
}
],
"mainClass": "net.minecraft.launchwrapper.Launch"
}
+220
View File
@@ -0,0 +1,220 @@
{
"install": {
"profileName": "FML",
"target":"@minecraft_version@-FML@version@",
"path":"cpw.mods:fml:@version@",
"version":"FML @version@",
"filePath":"@universal_jar@",
"welcome":"Welcome to the simple FML installer.",
"minecraft":"@minecraft_version@",
"mirrorList" : "http://files.minecraftforge.net/mirror-brand.list",
"logo":"/big_logo.png"
},
"versionInfo": {
"id": "@minecraft_version@-FML@version@",
"time": "@timestamp@",
"releaseTime": "1960-01-01T00:00:00-0700",
"type": "release",
"processArguments": "username_session_version",
"minecraftArguments": "--username ${auth_player_name} --session ${auth_session} --version ${version_name} --gameDir ${game_directory} --assetsDir ${game_assets} --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
"minimumLauncherVersion": 4,
"libraries": [
{
"name": "cpw.mods:fml:@version@",
"url": "http://files.minecraftforge.net/maven/"
},
{
"name": "net.minecraft:launchwrapper:1.3",
"serverreq":true
},
{
"name": "org.ow2.asm:asm-all:4.1",
"serverreq":true
},
{
"name": "org.scala-lang:scala-library:2.10.2",
"url" : "http://files.minecraftforge.net/maven/",
"checksums" : [ "6ba65d12cd09d441083262d6f73d2257fec7c663", "dffc88e804861c9eaba39283757000b6558ea573" ],
"comment" : "Important for FML, we add this",
"serverreq":true,
"clientreq":true
},
{
"name": "org.scala-lang:scala-compiler:2.10.2",
"url" : "http://files.minecraftforge.net/maven/",
"checksums" : [ "64c8b1380cc53d6850823d6e4e7ae984aa44ef9c", "40281b3ffc69fb385953522c843363ccaf71ba89" ],
"comment" : "Important for FML, we add this",
"serverreq":true,
"clientreq":true
},
{
"name": "net.sf.jopt-simple:jopt-simple:4.5",
"serverreq":true
},
{
"name": "lzma:lzma:0.0.1",
"serverreq":true
},
{
"name": "com.paulscode:codecjorbis:20101023"
},
{
"name": "com.paulscode:codecwav:20101023"
},
{
"name": "com.paulscode:libraryjavasound:20101123"
},
{
"name": "com.paulscode:librarylwjglopenal:20100824"
},
{
"name": "com.paulscode:soundsystem:20120107"
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0"
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0"
},
{
"name": "argo:argo:2.25_fixed"
},
{
"name": "org.bouncycastle:bcprov-jdk15on:1.47"
},
{
"name": "com.google.guava:guava:14.0"
},
{
"name": "org.apache.commons:commons-lang3:3.1"
},
{
"name": "commons-io:commons-io:2.4"
},
{
"name": "net.java.jinput:jinput:2.0.5"
},
{
"name": "net.java.jutils:jutils:1.0.0"
},
{
"name": "com.google.code.gson:gson:2.2.2"
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0",
"rules": [
{
"action": "allow"
},
{
"action": "disallow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0",
"rules": [
{
"action": "allow"
},
{
"action": "disallow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
"rules": [
{
"action": "allow"
},
{
"action": "disallow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
],
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.1-nightly-20130708-debug3",
"rules": [
{
"action": "allow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.1-nightly-20130708-debug3",
"rules": [
{
"action": "allow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.1-nightly-20130708-debug3",
"rules": [
{
"action": "allow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
],
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
},
{
"name": "net.java.jinput:jinput-platform:2.0.5",
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
}
],
"mainClass": "net.minecraft.launchwrapper.Launch"
}
}
+137
View File
@@ -0,0 +1,137 @@
{
"id": "FML{version}",
"time": "{timestamp}",
"releaseTime": "{timestamp}",
"type": "release",
"processArguments": "username_session_version",
"minecraftArguments": "--version FML_DEV --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
"minimumLauncherVersion": 4,
"libraries": [
{
"name": "net.minecraft:launchwrapper:1.7",
"comment" : "Important for FML, we add this"
},
{
"name": "org.ow2.asm:asm-debug-all:4.1",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2",
"comment" : "Important for FML, we add this"
},
{
"name": "org.scala-lang:scala-library:2.10.2",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2",
"comment" : "Important for FML, we add this"
},
{
"name": "org.scala-lang:scala-compiler:2.10.2",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2",
"comment" : "Important for FML, we add this"
},
{
"name": "net.sf.jopt-simple:jopt-simple:4.5",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "lzma:lzma:0.0.1"
},
{
"name": "com.paulscode:codecjorbis:20101023"
},
{
"name": "com.paulscode:codecwav:20101023"
},
{
"name": "com.paulscode:libraryjavasound:20101123"
},
{
"name": "com.paulscode:librarylwjglopenal:20100824"
},
{
"name": "com.paulscode:soundsystem:20120107"
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "argo:argo:2.25_fixed"
},
{
"name": "net.sourceforge.argo:argo:2.25",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2",
"comment" : "grumble grumble grumble, y u no use proper version/artifact id grumble"
},
{
"name": "org.bouncycastle:bcprov-jdk15on:1.47",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "com.google.guava:guava:14.0",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "org.apache.commons:commons-lang3:3.1",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "commons-io:commons-io:2.4",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "net.java.jinput:jinput:2.0.5",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "net.java.jutils:jutils:1.0.0",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "com.google.code.gson:gson:2.2.2",
"children" : ["sources"],
"url" : "http://repo.maven.apache.org/maven2"
},
{
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
},
{
"name": "net.java.jinput:jinput-platform:2.0.5",
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
}
],
"mainClass": "net.minecraft.launchwrapper.Launch"
}
+214
View File
@@ -0,0 +1,214 @@
{
"install": {
"profileName": "FML",
"target":"@minecraft_version@-FML@version@",
"path":"cpw.mods:fml:@version@",
"version":"FML @version@",
"filePath":"@universal_jar@",
"welcome":"Welcome to the simple FML installer.",
"minecraft":"@minecraft_version@",
"mirrorList" : "http://files.minecraftforge.net/mirror-brand.list",
"logo":"/big_logo.png"
},
"versionInfo": {
"id": "@minecraft_version@-FML@version@",
"time": "@timestamp@",
"releaseTime": "1960-01-01T00:00:00-0700",
"type": "release",
"processArguments": "username_session_version",
"minecraftArguments": "--username ${auth_player_name} --session ${auth_session} --version ${version_name} --gameDir ${game_directory} --assetsDir ${game_assets} --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
"minimumLauncherVersion": 4,
"libraries": [
{
"name": "cpw.mods:fml:@version@",
"url": "http://files.minecraftforge.net/maven/"
},
{
"name": "net.minecraft:launchwrapper:1.7",
"serverreq":true
},
{
"name": "org.ow2.asm:asm-all:4.1",
"serverreq":true
},
{
"name": "org.scala-lang:scala-library:2.10.2",
"url" : "http://files.minecraftforge.net/maven/",
"checksums" : [ "6ba65d12cd09d441083262d6f73d2257fec7c663", "dffc88e804861c9eaba39283757000b6558ea573" ],
"comment" : "Important for FML, we add this",
"serverreq":true,
"clientreq":true
},
{
"name": "org.scala-lang:scala-compiler:2.10.2",
"url" : "http://files.minecraftforge.net/maven/",
"checksums" : [ "64c8b1380cc53d6850823d6e4e7ae984aa44ef9c", "40281b3ffc69fb385953522c843363ccaf71ba89" ],
"comment" : "Important for FML, we add this",
"serverreq":true,
"clientreq":true
},
{
"name": "lzma:lzma:0.0.1",
"serverreq":true
},
{
"name": "net.sf.jopt-simple:jopt-simple:4.5",
"serverreq":true
},
{
"name": "com.paulscode:codecjorbis:20101023"
},
{
"name": "com.paulscode:codecwav:20101023"
},
{
"name": "com.paulscode:libraryjavasound:20101123"
},
{
"name": "com.paulscode:librarylwjglopenal:20100824"
},
{
"name": "com.paulscode:soundsystem:20120107"
},
{
"name": "argo:argo:2.25_fixed"
},
{
"name": "org.bouncycastle:bcprov-jdk15on:1.47"
},
{
"name": "com.google.guava:guava:14.0"
},
{
"name": "org.apache.commons:commons-lang3:3.1"
},
{
"name": "commons-io:commons-io:2.4"
},
{
"name": "net.java.jinput:jinput:2.0.5"
},
{
"name": "net.java.jutils:jutils:1.0.0"
},
{
"name": "com.google.code.gson:gson:2.2.2"
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0",
"rules": [
{
"action": "allow"
},
{
"action": "disallow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0",
"rules": [
{
"action": "allow"
},
{
"action": "disallow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.0",
"rules": [
{
"action": "allow"
},
{
"action": "disallow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
],
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.1-nightly-20130708-debug3",
"rules": [
{
"action": "allow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.1-nightly-20130708-debug3",
"rules": [
{
"action": "allow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
]
},
{
"name": "org.lwjgl.lwjgl:lwjgl-platform:2.9.1-nightly-20130708-debug3",
"rules": [
{
"action": "allow",
"os": {
"name": "osx",
"version": "^10\\.5\\.\\d$"
}
}
],
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
},
{
"name": "net.java.jinput:jinput-platform:2.0.5",
"natives": {
"linux": "natives-linux",
"windows": "natives-windows",
"osx": "natives-osx"
},
"extract": {
"exclude": [
"META-INF/"
]
}
}
],
"mainClass": "net.minecraft.launchwrapper.Launch"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
View File
Binary file not shown.
+17 -3
View File
@@ -1,5 +1,5 @@
[default]
current_ver = 1.6.1
current_ver = 1.6.3
base_url = http://s3.amazonaws.com/MinecraftDownload/
libraries = lwjgl.jar lwjgl_util.jar jinput.jar
natives = windows_natives.jar macosx_natives.jar linux_natives.jar
@@ -104,6 +104,20 @@ mcp_md5 = 39da81bbb4d73b3f5e2d1f8f5682cdb9
[1.6.1]
client_md5 = 3c56fb4b77b1ca37dde69b5eb896fc4d
server_md5 = ff8f81970a5955737c356b534d3aee96
mcp_ver = 8.02
mcp_ver = 8.03
mcp_url = http://mcp.ocean-labs.de/files/archive/mcp803.zip
mcp_md5 = 7810c2fba33e15889685b21ac8dc66cf
[1.6.2]
client_md5 = 1d43cdba8b9752d7f557ab7d3e365964
server_md5 = 39df9f29e6904ea7b351ffb4fe949881
mcp_ver = 8.04
mcp_url = http://mcp.ocean-labs.de/files/archive/mcp804.zip
mcp_md5 = ebcecfa00aae07548e67787044410a11
[1.6.3]
client_md5 = 233effe2110d40a0519cf1489e4ccb1c
server_md5 = 8ed981ab6030412f586bfe38ff0aaa82
mcp_ver = 8.09
mcp_url =
mcp_md5 = 39da81bbb4d73b3f5e2d1f8f5682cdb9
mcp_md5 =
@@ -12,7 +12,7 @@
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.awt.image.BufferedImage;
@@ -129,6 +134,8 @@
@@ -130,6 +135,8 @@
import org.lwjgl.opengl.PixelFormat;
import org.lwjgl.util.glu.GLU;
@@ -21,24 +21,24 @@
@SideOnly(Side.CLIENT)
public class Minecraft implements IPlayerUsage
{
@@ -364,6 +371,8 @@
@@ -366,6 +373,8 @@
this.func_71357_I();
this.field_71466_p = new FontRenderer(this.field_71474_y, new ResourceLocation("textures/font/ascii.png"), this.field_71446_o, false);
+ FMLClientHandler.instance().beginMinecraftLoading(this);
+ FMLClientHandler.instance().beginMinecraftLoading(this, this.field_110449_ao, this.field_110451_am);
+
if (this.field_71474_y.field_74363_ab != null)
{
this.field_71466_p.func_78264_a(this.field_135017_as.func_135042_a());
@@ -396,6 +405,7 @@
this.field_71446_o.func_130088_a(TextureMap.field_110576_c, new TextureMap(1, "textures/items/"));
@@ -400,6 +409,7 @@
this.field_71446_o.func_130088_a(TextureMap.field_110576_c, new TextureMap(1, "textures/items"));
GL11.glViewport(0, 0, this.field_71443_c, this.field_71440_d);
this.field_71452_i = new EffectRenderer(this.field_71441_e, this.field_71446_o);
+ FMLClientHandler.instance().finishMinecraftLoading();
this.func_71361_d("Post startup");
this.field_71456_v = new GuiIngame(this);
@@ -414,6 +424,7 @@
@@ -418,6 +428,7 @@
{
this.func_71352_k();
}
@@ -46,7 +46,7 @@
}
public void func_110436_a()
@@ -729,6 +740,7 @@
@@ -733,6 +744,7 @@
{
this.func_71405_e();
}
@@ -54,7 +54,7 @@
}
private void func_71411_J()
@@ -797,9 +809,11 @@
@@ -801,9 +813,11 @@
if (!this.field_71454_w)
{
@@ -66,7 +66,7 @@
}
GL11.glFlush();
@@ -1321,10 +1335,14 @@
@@ -1325,10 +1339,14 @@
public void func_71407_l()
{
@@ -81,7 +81,7 @@
this.field_71424_I.func_76320_a("stats");
this.field_71413_E.func_77449_e();
@@ -1775,6 +1793,8 @@
@@ -1785,6 +1803,8 @@
this.field_71453_ak.func_74428_b();
}
@@ -90,7 +90,7 @@
this.field_71424_I.func_76319_b();
this.field_71423_H = func_71386_F();
}
@@ -1798,8 +1818,27 @@
@@ -1808,8 +1828,27 @@
}
this.field_71413_E.func_77450_a(StatList.field_75936_f, 1);
@@ -1,13 +1,15 @@
--- ../src-base/minecraft/net/minecraft/client/multiplayer/NetClientHandler.java
+++ ../src-work/minecraft/net/minecraft/client/multiplayer/NetClientHandler.java
@@ -1,5 +1,6 @@
@@ -1,6 +1,8 @@
package net.minecraft.client.multiplayer;
import com.google.common.base.Charsets;
+
+import cpw.mods.fml.common.network.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.BufferedReader;
@@ -201,11 +202,14 @@
@@ -205,11 +207,14 @@
private GuiScreen field_98183_l;
Random field_72557_e = new Random();
@@ -22,7 +24,7 @@
}
public NetClientHandler(Minecraft p_i1177_1_, String p_i1177_2_, int p_i1177_3_, GuiScreen p_i1177_4_) throws IOException
@@ -214,6 +218,7 @@
@@ -218,6 +223,7 @@
this.field_98183_l = p_i1177_4_;
Socket socket = new Socket(InetAddress.getByName(p_i1177_2_), p_i1177_3_);
this.field_72555_g = new TcpConnection(p_i1177_1_.func_98033_al(), socket, "Client", this);
@@ -30,7 +32,7 @@
}
public NetClientHandler(Minecraft p_i1178_1_, IntegratedServer p_i1178_2_) throws IOException
@@ -221,6 +226,7 @@
@@ -225,6 +231,7 @@
this.field_72563_h = p_i1178_1_;
this.field_72555_g = new MemoryConnection(p_i1178_1_.func_98033_al(), this);
p_i1178_2_.func_71343_a().func_71754_a((MemoryConnection)this.field_72555_g, p_i1178_1_.func_110432_I().func_111285_a());
@@ -38,7 +40,7 @@
}
public void func_72547_c()
@@ -292,6 +298,7 @@
@@ -296,6 +303,7 @@
public void func_72513_a(Packet252SharedKey p_72513_1_)
{
@@ -46,15 +48,15 @@
this.func_72552_c(new Packet205ClientCommand(0));
}
@@ -307,6 +314,7 @@
@@ -311,6 +319,7 @@
this.field_72563_h.field_71439_g.field_70157_k = p_72455_1_.field_73561_a;
this.field_72556_d = p_72455_1_.field_73562_h;
this.field_72563_h.field_71442_b.func_78746_a(p_72455_1_.field_73557_d);
+ FMLNetworkHandler.onConnectionEstablishedToServer(this, field_72555_g, p_72455_1_);
this.field_72563_h.field_71474_y.func_82879_c();
this.field_72555_g.func_74429_a(new Packet250CustomPayload("MC|Brand", ClientBrandRetriever.getClientModName().getBytes(Charsets.UTF_8)));
}
@@ -760,6 +768,7 @@
@@ -765,6 +774,7 @@
{
this.field_72555_g.func_74429_a(p_72546_1_);
this.field_72555_g.func_74423_d();
@@ -62,7 +64,7 @@
}
}
@@ -799,6 +808,7 @@
@@ -804,6 +814,7 @@
public void func_72481_a(Packet3Chat p_72481_1_)
{
@@ -70,7 +72,7 @@
this.field_72563_h.field_71456_v.func_73827_b().func_73765_a(ChatMessageComponent.func_111078_c(p_72481_1_.field_73476_b).func_111068_a(true));
}
@@ -1379,6 +1389,11 @@
@@ -1403,6 +1414,11 @@
public void func_72494_a(Packet131MapData p_72494_1_)
{
@@ -82,7 +84,7 @@
if (p_72494_1_.field_73438_a == Item.field_77744_bd.field_77779_bT)
{
ItemMap.func_77874_a(p_72494_1_.field_73436_b, this.field_72563_h.field_71441_e).func_76192_a(p_72494_1_.field_73437_c);
@@ -1490,6 +1505,11 @@
@@ -1514,6 +1530,11 @@
public void func_72501_a(Packet250CustomPayload p_72501_1_)
{
@@ -94,7 +96,7 @@
if ("MC|TrList".equals(p_72501_1_.field_73630_a))
{
DataInputStream datainputstream = new DataInputStream(new ByteArrayInputStream(p_72501_1_.field_73629_c));
@@ -1670,4 +1690,20 @@
@@ -1707,4 +1728,20 @@
{
return this.field_72555_g;
}
@@ -9,4 +9,4 @@
-@SideOnly(Side.CLIENT)
public interface IBossDisplayData
{
float func_70667_aM();
float func_110138_aP();
@@ -8,7 +8,7 @@
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.Collection;
@@ -183,6 +185,7 @@
@@ -181,6 +183,7 @@
public void func_70071_h_()
{
@@ -16,7 +16,7 @@
if (this.field_71074_e != null)
{
ItemStack itemstack = this.field_71071_by.func_70448_g();
@@ -306,6 +309,7 @@
@@ -304,6 +307,7 @@
{
this.field_71100_bB.func_75118_a(this);
}
@@ -24,7 +24,7 @@
}
public int func_82145_z()
@@ -1954,4 +1958,9 @@
@@ -1906,4 +1910,9 @@
{
return this.func_70096_w().func_111145_d(17);
}
@@ -25,7 +25,7 @@
{
this.func_72527_a("Took too long to log in");
}
@@ -148,11 +152,18 @@
@@ -155,11 +159,18 @@
}
}
@@ -46,7 +46,7 @@
if (s != null)
{
@@ -270,4 +281,22 @@
@@ -282,4 +293,22 @@
{
return p_72531_0_.field_72544_i = p_72531_1_;
}
@@ -9,7 +9,7 @@
import net.minecraft.crash.CrashReport;
import net.minecraft.crash.CrashReportCategory;
import net.minecraft.entity.Entity;
@@ -34,6 +36,7 @@
@@ -36,6 +38,7 @@
import net.minecraft.network.packet.Packet108EnchantItem;
import net.minecraft.network.packet.Packet10Flying;
import net.minecraft.network.packet.Packet130UpdateSign;
@@ -17,7 +17,7 @@
import net.minecraft.network.packet.Packet13PlayerLookMove;
import net.minecraft.network.packet.Packet14BlockDig;
import net.minecraft.network.packet.Packet15Place;
@@ -634,6 +637,7 @@
@@ -618,6 +621,7 @@
public void func_72481_a(Packet3Chat p_72481_1_)
{
@@ -25,7 +25,7 @@
if (this.field_72574_e.func_71126_v() == 2)
{
this.func_72567_b(new Packet3Chat(ChatMessageComponent.func_111077_e("chat.cannotSend").func_111059_a(EnumChatFormatting.RED)));
@@ -1009,6 +1013,11 @@
@@ -1013,6 +1017,11 @@
}
public void func_72501_a(Packet250CustomPayload p_72501_1_)
@@ -37,9 +37,9 @@
{
DataInputStream datainputstream;
ItemStack itemstack;
@@ -1173,4 +1182,18 @@
}
}
@@ -1182,4 +1191,18 @@
{
return this.field_72576_c;
}
+
+
@@ -7,7 +7,7 @@
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.BufferedOutputStream;
@@ -386,6 +387,7 @@
@@ -392,6 +393,7 @@
if (this.field_74472_n && this.field_74473_o.isEmpty())
{
this.field_74485_r.func_72515_a(this.field_74481_v, this.field_74480_w);
@@ -7,9 +7,9 @@
public abstract class NetHandler
{
@@ -375,4 +377,8 @@
@@ -382,4 +384,8 @@
{
this.func_72509_a(p_110773_1_);
return false;
}
+
+ public abstract void handleVanilla250Packet(Packet250CustomPayload payload);
@@ -7,5 +7,5 @@
- func_73285_a(131, true, false, Packet131MapData.class);
+ func_73285_a(131, true, true, Packet131MapData.class);
func_73285_a(132, true, false, Packet132TileEntityData.class);
func_73285_a(133, true, false, Packet133TileEditorOpen.class);
func_73285_a(200, true, false, Packet200Statistic.class);
func_73285_a(201, true, false, Packet201PlayerInfo.class);
@@ -7,7 +7,7 @@
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.awt.GraphicsEnvironment;
@@ -366,7 +367,11 @@
@@ -368,7 +369,11 @@
{
if (this.func_71197_b())
{
@@ -19,7 +19,7 @@
for (long j = 0L; this.field_71317_u; this.field_71296_Q = true)
{
@@ -405,6 +410,7 @@
@@ -407,6 +412,7 @@
Thread.sleep(1L);
}
@@ -27,7 +27,7 @@
}
else
{
@@ -413,6 +419,10 @@
@@ -415,6 +421,10 @@
}
catch (Throwable throwable)
{
@@ -38,7 +38,7 @@
throwable.printStackTrace();
this.func_98033_al().func_98234_c("Encountered an unexpected exception " + throwable.getClass().getSimpleName(), throwable);
CrashReport crashreport = null;
@@ -443,6 +453,10 @@
@@ -445,6 +455,10 @@
{
try
{
@@ -49,7 +49,7 @@
this.func_71260_j();
this.field_71316_v = true;
}
@@ -452,6 +466,8 @@
@@ -454,6 +468,8 @@
}
finally
{
@@ -58,7 +58,7 @@
this.func_71240_o();
}
}
@@ -468,8 +484,10 @@
@@ -470,8 +486,10 @@
public void func_71217_p()
{
@@ -69,7 +69,7 @@
++this.field_71315_w;
if (this.field_71295_T)
@@ -515,6 +533,7 @@
@@ -517,6 +535,7 @@
this.field_71304_b.func_76319_b();
this.field_71304_b.func_76319_b();
@@ -77,7 +77,7 @@
}
public void func_71190_q()
@@ -542,6 +561,7 @@
@@ -544,6 +563,7 @@
}
this.field_71304_b.func_76320_a("tick");
@@ -85,7 +85,7 @@
CrashReport crashreport;
try
@@ -566,6 +586,7 @@
@@ -568,6 +588,7 @@
throw new ReportedException(crashreport);
}
@@ -93,7 +93,7 @@
this.field_71304_b.func_76319_b();
this.field_71304_b.func_76320_a("tracker");
worldserver.func_73039_n().func_72788_a();
@@ -693,7 +714,7 @@
@@ -695,7 +716,7 @@
public String getServerModName()
{
@@ -16,7 +16,7 @@
this.func_98033_al().func_98233_a("Loading properties");
this.field_71340_o = new PropertyManager(new File("server.properties"), this.func_98033_al());
@@ -131,6 +134,8 @@
@@ -132,6 +135,8 @@
this.func_98033_al().func_98236_b("While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose.");
this.func_98033_al().func_98236_b("To change this, set \"online-mode\" to \"true\" in the server.properties file.");
}
@@ -25,7 +25,7 @@
this.func_71210_a(new DedicatedPlayerList(this));
long j = System.nanoTime();
@@ -173,6 +178,7 @@
@@ -174,6 +179,7 @@
this.func_71191_d((this.func_71207_Z() + 8) / 16 * 16);
this.func_71191_d(MathHelper.func_76125_a(this.func_71207_Z(), 64, 256));
this.field_71340_o.func_73667_a("max-build-height", Integer.valueOf(this.func_71207_Z()));
@@ -33,7 +33,7 @@
this.func_98033_al().func_98233_a("Preparing level \"" + this.func_71270_I() + "\"");
this.func_71247_a(this.func_71270_I(), this.func_71270_I(), k, worldtype, s2);
long i1 = System.nanoTime() - j;
@@ -193,7 +199,7 @@
@@ -194,7 +200,7 @@
this.field_71339_n.func_72602_a();
}
@@ -1,14 +1,16 @@
--- ../src-base/minecraft/net/minecraft/server/management/ServerConfigurationManager.java
+++ ../src-work/minecraft/net/minecraft/server/management/ServerConfigurationManager.java
@@ -1,5 +1,7 @@
@@ -1,6 +1,9 @@
package net.minecraft.server.management;
import com.google.common.base.Charsets;
+
+import cpw.mods.fml.common.network.FMLNetworkHandler;
+import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.File;
@@ -120,6 +122,8 @@
@@ -124,6 +127,8 @@
p_72355_2_.func_71116_b();
@@ -17,7 +19,7 @@
if (nbttagcompound != null && nbttagcompound.func_74764_b("Riding"))
{
Entity entity = EntityList.func_75615_a(nbttagcompound.func_74775_l("Riding"), worldserver);
@@ -234,6 +238,7 @@
@@ -238,6 +243,7 @@
public void func_72367_e(EntityPlayerMP p_72367_1_)
{
@@ -25,7 +27,7 @@
this.func_72391_b(p_72367_1_);
WorldServer worldserver = p_72367_1_.func_71121_q();
@@ -391,6 +396,7 @@
@@ -395,6 +401,7 @@
this.field_72404_b.add(entityplayermp1);
entityplayermp1.func_71116_b();
entityplayermp1.func_70606_j(entityplayermp1.func_110143_aJ());
@@ -33,7 +35,7 @@
return entityplayermp1;
}
@@ -416,6 +422,8 @@
@@ -420,6 +427,8 @@
PotionEffect potioneffect = (PotionEffect)iterator.next();
p_72356_1_.field_71135_a.func_72567_b(new Packet41EntityEffect(p_72356_1_.field_70157_k, potioneffect));
}
@@ -45,3 +45,11 @@
}
else
{
@@ -131,7 +146,6 @@
}
}
- @SideOnly(Side.CLIENT)
public double func_70318_a(double p_70318_1_, double p_70318_3_, double p_70318_5_)
{
double d3 = (double)this.field_70329_l + 0.5D - p_70318_1_;
@@ -0,0 +1,13 @@
--- ../src-base/minecraft/net/minecraft/util/ResourceLocation.java
+++ ../src-work/minecraft/net/minecraft/util/ResourceLocation.java
@@ -1,10 +1,7 @@
package net.minecraft.util;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
import org.apache.commons.lang3.Validate;
-@SideOnly(Side.CLIENT)
public class ResourceLocation
{
private final String field_110626_a;
Loaded 100 of 104 files, more files were not shown because too many files have changed in this diff. Show more