Compare commits

..
118 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
Christian 3f15cd54c2 Functional client @ 1.6.1 2013-06-30 21:02:23 -04:00
Christian 12c928c538 Tweak commands patch 2013-06-30 19:33:47 -04:00
Christian 7406b38d8a 1.6.1 2013-06-30 16:50:30 -04:00
Christian ef646d3146 Merge branch '16launch' 2013-06-30 13:20:46 -04:00
Christian 18371bd8c9 Some fixes for updated mcp code 2013-06-30 13:17:20 -04:00
Christian e35e4b16ff More fixups 2013-06-30 09:04:50 -04:00
LexManos 3711da9c45 Another typo 2013-06-30 03:55:26 -07:00
LexManos 6a318ddb78 Fix typo in new packages. 2013-06-30 01:01:55 -07:00
LexManos 2766f9a293 Push conf folder for 1.6, Relied heavily on a yet-unreleased version of MCP. 2013-06-29 22:48:24 -07:00
Christian 2e3f2461fa More fixes, binpatching works 2013-06-29 15:16:18 -04:00
119 changed files with 36759 additions and 37846 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
+86 -21
View File
@@ -30,9 +30,13 @@
<isset property="env.WORKSPACE" />
</condition>
<property name="fml.python.dir" location="${basedir}/python" />
<property name="fml.lzma.dir" location="${basedir}/lzmabin" />
<condition property="python.exe" value="${fml.python.dir}/python_fml" else="python">
<os family="Windows" />
</condition>
<condition property="lzma.exe" value="${fml.lzma.dir}/xz.exe" else="xz">
<os family="Windows" />
</condition>
<condition property="mcp.exists">
<available file="${mcp.home}/runtime/commands.py" />
</condition>
@@ -127,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>
@@ -141,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">
<zipfileset dir="${basedir}/binpatch" prefix="binpatch" includes="**/*.binpatch"/>
<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>
@@ -176,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" />
@@ -216,7 +262,8 @@
<globmapper from="packaged.srg" to="deobfuscation_data-${version.minecraft}" />
</mappedresources>
</copy>
<exec executable="lzma">
<exec executable="${lzma.exe}">
<arg line="--format=lzma"/>
<arg line="build-tmp-deobf/deobfuscation_data-${version.minecraft}"/>
<arg line="-v"/>
</exec>
@@ -225,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" />
@@ -269,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>
@@ -381,28 +432,42 @@
<signjar alias="FML" jar="${basedir}/target/${universal.jarname}.zip" keypass="${sign.KEYPASS}" keystore="${env.JENKINS_HOME}/${sign.KEYSTORE}" storepass="${sign.STOREPASS}" verbose="true" />
</target>
<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-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>
<delete dir="${basedir}/binpatch" verbose="true"/>
<java classname="cpw.mods.fml.common.patcher.GenDiffSet">
<classpath>
<pathelement path="${mcp.obfoutput}/minecraft"/>
<fileset dir="${mcp.home}/lib" includes="guava-14.0-rc3.jar,asm-debug-all-4.1.jar"/>
</classpath>
<java classname="cpw.mods.fml.common.patcher.GenDiffSet" classpathref="diffset.libs">
<arg path="${mcp.home}/jars/versions/${version.minecraft}/${version.minecraft}.jar.backup"/>
<arg path="${mcp.obfoutput}/minecraft"/>
<arg path="${basedir}/deobfuscation_data-${version.minecraft}.lzma"/>
<arg path="${basedir}/binpatch/client"/>
<arg value="false"/>
</java>
<java classname="cpw.mods.fml.common.patcher.GenDiffSet">
<classpath>
<pathelement path="${mcp.obfoutput}/minecraft"/>
<fileset dir="${mcp.home}/lib" includes="guava-14.0-rc3.jar,asm-debug-all-4.1.jar"/>
</classpath>
<java classname="cpw.mods.fml.common.patcher.GenDiffSet" classpathref="diffset.libs">
<arg path="${mcp.home}/jars/minecraft_server.${version.minecraft}.jar.backup"/>
<arg path="${mcp.obfoutput}/minecraft"/>
<arg path="${basedir}/deobfuscation_data-${version.minecraft}.lzma"/>
<arg path="${basedir}/binpatch/server"/>
<arg value="true"/>
</java>
<mkdir dir="binpatch-tmp"/>
<zip destfile="binpatch-tmp/binpatches.jar" basedir="${basedir}">
<include name="binpatch/**/*.binpatch"/>
</zip>
<apply executable="pack200">
<arg line="--no-gzip"/>
<arg line="binpatch-tmp/binpatches.pack"/>
<fileset dir="binpatch-tmp" includes="binpatches.jar"/>
</apply>
<apply executable="${lzma.exe}">
<arg line="--format=lzma"/>
<arg line="-v"/>
<fileset dir="binpatch-tmp" includes="binpatches.pack"/>
</apply>
<move file="binpatch-tmp/binpatches.pack.lzma" todir="${basedir}"/>
<delete dir="binpatch-tmp" failonerror="false"/>
</target>
</project>
@@ -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));
}
}
@@ -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
*/
@@ -21,6 +21,7 @@ public class GuiCustomModLoadingErrorScreen extends GuiErrorScreen
private CustomModLoadingErrorDisplayException customException;
public GuiCustomModLoadingErrorScreen(CustomModLoadingErrorDisplayException customException)
{
super(null,null);
this.customException = customException;
}
@Override
@@ -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
*/
@@ -29,6 +29,7 @@ public class GuiDupesFound extends GuiErrorScreen
public GuiDupesFound(DuplicateModsFoundException dupes)
{
super(null,null);
this.dupes = dupes;
}
+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;
@@ -24,6 +24,7 @@ public class GuiModsMissing extends GuiErrorScreen
public GuiModsMissing(MissingModsException modsMissing)
{
super(null,null);
this.modsMissing = modsMissing;
}
@@ -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
*/
@@ -22,6 +22,7 @@ public class GuiWrongMinecraft extends GuiErrorScreen
private WrongMinecraftVersionException wrongMC;
public GuiWrongMinecraft(WrongMinecraftVersionException wrongMC)
{
super(null,null);
this.wrongMC = wrongMC;
}
@Override
@@ -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);
+69 -20
View File
@@ -1,6 +1,17 @@
--- commands.py
+++ commands.py
@@ -142,6 +142,8 @@
@@ -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"""
@@ -980,6 +982,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
@@ -1311,6 +1315,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])
@@ -1368,7 +1375,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)
@@ -1376,7 +1383,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)
@@ -1733,7 +1740,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:
@@ -1748,6 +1755,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))
@@ -1920,6 +1930,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])
@@ -1940,6 +1953,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;
}
}
@@ -468,7 +468,7 @@ public class FMLCommonHandler
MinecraftServer server = getMinecraftServerInstance();
Loader.instance().serverStopped();
// FORCE the internal server to stop: hello optifine workaround!
ObfuscationReflectionHelper.setPrivateValue(MinecraftServer.class, server, false, "field_71316_v", "u", "serverStopped");
if (server!=null) ObfuscationReflectionHelper.setPrivateValue(MinecraftServer.class, server, false, "field_71316_v", "u", "serverStopped");
}
public String getModName()
@@ -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("*"))
{
@@ -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
*/
@@ -150,7 +150,7 @@ public class MCPMerger
line = line.split("#")[0];
char cmd = line.charAt(0);
line = line.substring(1).trim();
switch (cmd)
{
case '!': dontAnnotate.add(line); break;
@@ -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())
{
@@ -347,7 +346,7 @@ public class MCPMerger
}
String entryName = entry.getName();
boolean filtered = false;
for (String filter : dontProcess)
{
@@ -357,7 +356,7 @@ public class MCPMerger
break;
}
}
if (filtered || !entryName.endsWith(".class") || entryName.startsWith("."))
{
ZipEntry newEntry = new ZipEntry(entry.getName());
@@ -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();
@@ -47,7 +56,9 @@ public class FMLTweaker implements ITweaker {
classLoader.addTransformerExclusion("cpw.mods.fml.repackage.");
classLoader.addTransformerExclusion("cpw.mods.fml.relauncher.");
classLoader.addTransformerExclusion("cpw.mods.fml.common.asm.transformers.");
classLoader.addClassLoaderExclusion("LZMA.");
FMLLaunchHandler.configureForClientLaunch(classLoader, this);
FMLLaunchHandler.appendCoreMods();
}
@Override
@@ -59,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()
@@ -95,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;
}
@@ -1,8 +1,11 @@
package cpw.mods.fml.common.patcher;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.security.CodeSource;
import java.util.Collections;
@@ -10,19 +13,24 @@ import java.util.List;
import java.util.Locale;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
import java.util.jar.Pack200;
import java.util.logging.Level;
import java.util.regex.Pattern;
import LZMA.LzmaInputStream;
import com.google.common.base.Joiner;
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;
@@ -31,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)
@@ -49,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))
{
@@ -61,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)
{
@@ -71,75 +108,111 @@ 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;
}
public void setup(Side side)
{
Pattern binpatchMatcher = Pattern.compile(String.format("binpatch/%s/.*.binpatch", side.toString().toLowerCase(Locale.ENGLISH)));
JarFile fmlJar;
JarInputStream jis;
try
{
FMLRelaunchLog.fine("FML URI is %s", FMLTweaker.getJarLocation());
File fmlJarFile = new File(FMLTweaker.getJarLocation());
if (!fmlJarFile.exists() || !fmlJarFile.isFile())
InputStream binpatchesCompressed = getClass().getResourceAsStream("/binpatches.pack.lzma");
if (binpatchesCompressed==null)
{
FMLRelaunchLog.log(Level.INFO, "Not found an FML jar, I assume you're developing FML. Hi cpw or Lex!");
patches = ArrayListMultimap.create();
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;
}
fmlJar = new JarFile(fmlJarFile);
LzmaInputStream binpatchesDecompressed = new LzmaInputStream(binpatchesCompressed);
ByteArrayOutputStream jarBytes = new ByteArrayOutputStream();
JarOutputStream jos = new JarOutputStream(jarBytes);
Pack200.newUnpacker().unpack(binpatchesDecompressed, jos);
jis = new JarInputStream(new ByteArrayInputStream(jarBytes.toByteArray()));
}
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);
}
patches = ArrayListMultimap.create();
for (JarEntry entry : Collections.list(fmlJar.entries()))
do
{
if (binpatchMatcher.matcher(entry.getName()).matches())
try
{
ClassPatch cp = readPatch(entry, fmlJar);
if (cp != null)
JarEntry entry = jis.getNextJarEntry();
if (entry == null)
{
patches.put(cp.sourceClassName, cp);
break;
}
if (binpatchMatcher.matcher(entry.getName()).matches())
{
ClassPatch cp = readPatch(entry, jis);
if (cp != null)
{
patches.put(cp.sourceClassName, cp);
}
}
else
{
jis.closeEntry();
}
}
}
FMLLog.fine("Read %d binary patches from %s", patches.size(), fmlJar.getName());
FMLLog.fine("Patch list :\n\t%s", Joiner.on("\t\n").join(patches.asMap().entrySet()));
catch (IOException e)
{
}
} while (true);
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, JarFile jarFile)
private ClassPatch readPatch(JarEntry patchEntry, JarInputStream jis)
{
FMLLog.finest("Reading patch data from %s in file %s", patchEntry.getName(), jarFile.getName());
FMLRelaunchLog.finest("Reading patch data from %s", patchEntry.getName());
ByteArrayDataInput input;
try
{
input = ByteStreams.newDataInput(ByteStreams.toByteArray(jarFile.getInputStream(patchEntry)));
input = ByteStreams.newDataInput(ByteStreams.toByteArray(jis));
}
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);
}
}
@@ -2,7 +2,10 @@ package cpw.mods.fml.common.patcher;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.logging.Level;
@@ -10,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;
@@ -19,11 +23,13 @@ import cpw.mods.fml.repackage.com.nothome.delta.Delta;
public class GenDiffSet {
private static final List<String> RESERVED_NAMES = Arrays.asList("CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9");
public static void main(String[] args) throws IOException
{
String sourceJar = args[0]; //Clean Vanilla jar minecraft.jar or minecraft_server.jar
String targetDir = args[1]; //Directory containing obfed output classes, typically mcp/reobf/minecraft
String deobfData = args[2]; //Path to FML's deobfusication_data.zip
String deobfData = args[2]; //Path to FML's deobfusication_data.lzma
String outputDir = args[3]; //Path to place generated .binpatch
String killTarget = args[4]; //"true" if we should destroy the target file if it generated a successful .binpatch
@@ -40,18 +46,26 @@ public class GenDiffSet {
for (String name : remapper.getObfedClasses())
{
// Logger.getLogger("GENDIFF").info(String.format("Evaluating path for data :%s",name));
File targetFile = new File(targetDir, name.replace('/', File.separatorChar) + ".class");
String fileName = name;
String jarName = name;
if (RESERVED_NAMES.contains(name.toUpperCase(Locale.ENGLISH)))
{
fileName = "_"+name;
}
File targetFile = new File(targetDir, fileName.replace('/', File.separatorChar) + ".class");
jarName = jarName+".class";
if (targetFile.exists())
{
String sourceClassName = name.replace('/', '.');
String targetClassName = remapper.map(name).replace('/', '.');
JarEntry entry = sourceZip.getJarEntry(name);
JarEntry entry = sourceZip.getJarEntry(jarName);
byte[] vanillaBytes = entry != null ? ByteStreams.toByteArray(sourceZip.getInputStream(entry)) : new byte[0];
byte[] patchedBytes = Files.toByteArray(targetFile);
byte[] diff = delta.compute(vanillaBytes, patchedBytes);
ByteArrayDataOutput diffOut = ByteStreams.newDataOutput(diff.length + 50);
// Original name
diffOut.writeUTF(name);
@@ -61,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 ash.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 np.a(Ljava/lang/Class;Ljava/lang/String;I)V #MD:EntityList/func_75618_a
public np.a(Ljava/lang/Class;Ljava/lang/String;III)V #MD:EntityList/func_75614_a
public np.b #FD:EntityList/field_75625_b #nameToClassMap
public np.c #FD:EntityList/field_75626_c #classToNameMap
public np.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 bfx.q #FD:RenderManager/field_78729_o #renderers
public bgl.q #FD:RenderManager/field_78729_o #renderers
# RenderBlocks - everything
public bfd.* #FD:RenderBlocks/*
public bfd.*() #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 bgg.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 bip.m #FD:TileEntityRenderer/field_76966_m
public bje.m #FD:TileEntityRenderer/field_76966_m
# CraftingManager - make the add recipe methods public
public zz.a(Lxy;[Ljava/lang/Object;)Laac; #MD:CraftingManager/func_92103_a
public zz.b(Lxy;[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 mf.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 kq.a #FD:StatBase/field_75978_a #statName
public ku.a #FD:StatBase/field_75978_a #statName
# NetLoginHandler
public ju.a(Lju;Z)Z #MD:NetLoginHandler/func_72531_a #'complete connection'
public ju.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 jr.bJ()V #MD:EntityPlayerMP/func_71117_bO
public jr.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 pq #CL:EntityAITaskEntry
public pu #CL:EntityAITaskEntry
# EntityAITasks
public pp.a #FD:EntityAITasks/field_75782_a #taskList
public pt.a #FD:EntityAITasks/field_75782_a #taskList
# BlockChest
public anc.m(Labq;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 oc.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 qc.a(Labq;III)Z #MD:EntityAIOcelotSit/func_75398_a #nearestSittableBlock
protected qc.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 rl.bp #FD:EntityAnimal/field_70881_d #inLove
public rp.bp #FD:EntityAnimal/field_70881_d #inLove
# WorldType
public aca.<init>(ILjava/lang/String;)V #MD:WorldType/<init>(ILjava/lang/String;)
public aca.<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 aje #CL:ComponentVillage
public ajm #CL:ComponentVillage
# StructureStart
public aiv.a #FD:StructureStart/field_75075_a
# EntityVillager - minmax lists
public tv.a(Labg;ILjava/util/Random;F)V #MD:EntityVillager/func_70948_a #addBuy
public tv.b(Labg;ILjava/util/Random;F)V #MD:EntityVillager/func_70949_b #addSell
public tv.bB #FD:EntityVillager/field_70958_bB
public tv.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 axn #CL:GuiButtonMerchant
public axx #CL:GuiButtonMerchant
protected aun.a #FD:GuiYesNo/field_73942_a #guiScreen
protected aux.a #FD:GuiYesNo/field_73942_a #guiScreen
# Minecraft
public atm.C #FD:Minecraft/field_71425_J #running
public atm.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
tz 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
aqr 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
xw 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"],
+1922 -1906
View File
File diff suppressed because it is too large. Load diff
+7383 -2273
View File
File diff suppressed because it is too large. Load diff
+18604 -17976
View File
File diff suppressed because it is too large. Load diff
+13 -13
View File
@@ -34,12 +34,12 @@ ReobfClientSrg = %(DirTemp)s/client_ro_srg.srg
ReobfServerSrg = %(DirTemp)s/server_ro_srg.srg
[JAR]
DirNatives = %(DirJars)s/versions/1.6/natives
Json = %(DirJars)s/versions/1.6/1.6.json
Client = %(DirJars)s/versions/1.6/1.6.jar
Server = %(DirJars)s/minecraft_server.1.6.jar
MD5Client = 6a64a2136e3a3fe4d29b0a0df30b25fc
MD5Server = 7c03305c8bf97a8e8f3cdb147fc90607
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 = 233effe2110d40a0519cf1489e4ccb1c
MD5Server = 8ed981ab6030412f586bfe38ff0aaa82
[RETROGUARD]
Location = %(DirRuntime)s/bin/retroguard.jar
@@ -79,7 +79,7 @@ BinClientTemp = %(DirTempBin)s/minecraft
BinServerTemp = %(DirTempBin)s/minecraft_server
SrcClient = %(DirSrc)s/minecraft
SrcServer = %(DirSrc)s/minecraft_server
TestClient = net/minecraft/client/Minecraft
TestClient = net/minecraft/client/main/Main
TestServer = net/minecraft/server/MinecraftServer
[PATCHES]
@@ -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/versions/1.6/1.6.jar
ClassPathServer = %(DirLib)s/,%(DirLib)s/*,%(DirJars)s/minecraft_server.1.6.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 = 130000
ParamIndex = 30000
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}
+1704 -1527
View File
File diff suppressed because it is too large. Load diff
-8820
View File
File diff suppressed because it is too large. Load diff
+28 -16
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
@@ -297,13 +297,15 @@ BackupList,net/minecraft/client/mco
ExceptionMcoHttp,net/minecraft/client/mco
ExceptionMcoService,net/minecraft/client/mco
ExceptionRetryCall,net/minecraft/client/mco
GuiScreenClientOutdated,net/minecraft/client/mco
GuiScreenConfirmationType,net/minecraft/client/mco
McoClient,net/minecraft/client/mco
McoServer,net/minecraft/client/mco
McoServerAddress,net/minecraft/client/mco
McoServerList,net/minecraft/client/mco
McoServerListEmptyAnon,net/minecraft/client/mco
McoServerListUpdateThread,net/minecraft/client/mco
McoServerListUpdateThreadComparer,net/minecraft/client/mco
McoServerListUpdateTask,net/minecraft/client/mco
McoServerListUpdateTaskComparator,net/minecraft/client/mco
PendingInvite,net/minecraft/client/mco
PendingInvitesList,net/minecraft/client/mco
Request,net/minecraft/client/mco
@@ -374,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
@@ -405,10 +409,6 @@ EntitySnowShovelFX,net/minecraft/client/particle
EntitySpellParticleFX,net/minecraft/client/particle
EntitySplashFX,net/minecraft/client/particle
EntitySuspendFX,net/minecraft/client/particle
RenderCaveSpider,net/minecraft/client/render/entity
RenderHorse,net/minecraft/client/render/entity
RenderLeashKnot,net/minecraft/client/render/entity
RendererLivingEntity,net/minecraft/client/render/entity
ActiveRenderInfo,net/minecraft/client/renderer
CallableMouseLocation,net/minecraft/client/renderer
CallableParticlePositionInfo,net/minecraft/client/renderer
@@ -446,6 +446,7 @@ RenderBat,net/minecraft/client/renderer/entity
RenderBiped,net/minecraft/client/renderer/entity
RenderBlaze,net/minecraft/client/renderer/entity
RenderBoat,net/minecraft/client/renderer/entity
RenderCaveSpider,net/minecraft/client/renderer/entity
RenderChicken,net/minecraft/client/renderer/entity
RenderCow,net/minecraft/client/renderer/entity
RenderCreeper,net/minecraft/client/renderer/entity
@@ -458,13 +459,16 @@ RenderFireball,net/minecraft/client/renderer/entity
RenderFish,net/minecraft/client/renderer/entity
RenderGhast,net/minecraft/client/renderer/entity
RenderGiantZombie,net/minecraft/client/renderer/entity
RenderHorse,net/minecraft/client/renderer/entity
RenderIronGolem,net/minecraft/client/renderer/entity
RenderItem,net/minecraft/client/renderer/entity
RenderLeashKnot,net/minecraft/client/renderer/entity
RenderLightningBolt,net/minecraft/client/renderer/entity
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
@@ -486,6 +490,7 @@ RenderWither,net/minecraft/client/renderer/entity
RenderWolf,net/minecraft/client/renderer/entity
RenderXPOrb,net/minecraft/client/renderer/entity
RenderZombie,net/minecraft/client/renderer/entity
RendererLivingEntity,net/minecraft/client/renderer/entity
AbstractTexture,net/minecraft/client/renderer/texture
DynamicTexture,net/minecraft/client/renderer/texture
IconRegister,net/minecraft/client/renderer/texture
@@ -522,7 +527,6 @@ DefaultResourcePack,net/minecraft/client/resources
FallbackResourceManager,net/minecraft/client/resources
FileResourcePack,net/minecraft/client/resources
FolderResourcePack,net/minecraft/client/resources
FolderResourcePackFilter,net/minecraft/client/resources
FoliageColorReloadListener,net/minecraft/client/resources
GrassColorReloadListener,net/minecraft/client/resources
GuiScreenTemporaryResourcePackSelect,net/minecraft/client/resources
@@ -533,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
@@ -581,6 +584,7 @@ CommandHandler,net/minecraft/command
CommandHelp,net/minecraft/command
CommandKill,net/minecraft/command
CommandNotFoundException,net/minecraft/command
CommandPlaySound,net/minecraft/command
CommandServerBan,net/minecraft/command
CommandServerBanIp,net/minecraft/command
CommandServerBanlist,net/minecraft/command
@@ -600,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
@@ -759,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
@@ -798,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
@@ -849,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
@@ -886,6 +891,7 @@ EntitySmallFireball,net/minecraft/entity/projectile
EntitySnowball,net/minecraft/entity/projectile
EntityThrowable,net/minecraft/entity/projectile
EntityWitherSkull,net/minecraft/entity/projectile
AnimalChest,net/minecraft/inventory
Container,net/minecraft/inventory
ContainerBeacon,net/minecraft/inventory
ContainerBrewingStand,net/minecraft/inventory
@@ -894,6 +900,9 @@ ContainerDispenser,net/minecraft/inventory
ContainerEnchantment,net/minecraft/inventory
ContainerFurnace,net/minecraft/inventory
ContainerHopper,net/minecraft/inventory
ContainerHorseInventory,net/minecraft/inventory
ContainerHorseInventorySlotArmor,net/minecraft/inventory
ContainerHorseInventorySlotSaddle,net/minecraft/inventory
ContainerMerchant,net/minecraft/inventory
ContainerPlayer,net/minecraft/inventory
ContainerRepair,net/minecraft/inventory
@@ -920,10 +929,6 @@ SlotEnchantment,net/minecraft/inventory
SlotEnchantmentTable,net/minecraft/inventory
SlotFurnace,net/minecraft/inventory
SlotMerchantResult,net/minecraft/inventory
AnimalChest,net/minecraft/inventroy
ContainerHorseInventory,net/minecraft/inventroy
ContainerHorseInventorySlotArmor,net/minecraft/inventroy
ContainerHorseInventorySlotSaddle,net/minecraft/inventroy
BehaviorDispenseArmor,net/minecraft/item
BehaviorDispenseMinecart,net/minecraft/item
EnumAction,net/minecraft/item
@@ -1066,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
@@ -1113,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
@@ -1171,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
@@ -1290,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
@@ -1474,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
@@ -1511,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
297 ExceptionMcoHttp net/minecraft/client/mco
298 ExceptionMcoService net/minecraft/client/mco
299 ExceptionRetryCall net/minecraft/client/mco
300 GuiScreenClientOutdated net/minecraft/client/mco
301 GuiScreenConfirmationType net/minecraft/client/mco
302 McoClient net/minecraft/client/mco
303 McoServer net/minecraft/client/mco
304 McoServerAddress net/minecraft/client/mco
305 McoServerList net/minecraft/client/mco
306 McoServerListEmptyAnon net/minecraft/client/mco
307 McoServerListUpdateThread McoServerListUpdateTask net/minecraft/client/mco
308 McoServerListUpdateThreadComparer McoServerListUpdateTaskComparator net/minecraft/client/mco
309 PendingInvite net/minecraft/client/mco
310 PendingInvitesList net/minecraft/client/mco
311 Request net/minecraft/client/mco
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
409 EntitySpellParticleFX net/minecraft/client/particle
410 EntitySplashFX net/minecraft/client/particle
411 EntitySuspendFX net/minecraft/client/particle
RenderCaveSpider net/minecraft/client/render/entity
RenderHorse net/minecraft/client/render/entity
RenderLeashKnot net/minecraft/client/render/entity
RendererLivingEntity net/minecraft/client/render/entity
412 ActiveRenderInfo net/minecraft/client/renderer
413 CallableMouseLocation net/minecraft/client/renderer
414 CallableParticlePositionInfo net/minecraft/client/renderer
446 RenderBiped net/minecraft/client/renderer/entity
447 RenderBlaze net/minecraft/client/renderer/entity
448 RenderBoat net/minecraft/client/renderer/entity
449 RenderCaveSpider net/minecraft/client/renderer/entity
450 RenderChicken net/minecraft/client/renderer/entity
451 RenderCow net/minecraft/client/renderer/entity
452 RenderCreeper net/minecraft/client/renderer/entity
459 RenderFish net/minecraft/client/renderer/entity
460 RenderGhast net/minecraft/client/renderer/entity
461 RenderGiantZombie net/minecraft/client/renderer/entity
462 RenderHorse net/minecraft/client/renderer/entity
463 RenderIronGolem net/minecraft/client/renderer/entity
464 RenderItem net/minecraft/client/renderer/entity
465 RenderLeashKnot net/minecraft/client/renderer/entity
466 RenderLightningBolt net/minecraft/client/renderer/entity
467 RenderLiving net/minecraft/client/renderer/entity
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
490 RenderWolf net/minecraft/client/renderer/entity
491 RenderXPOrb net/minecraft/client/renderer/entity
492 RenderZombie net/minecraft/client/renderer/entity
493 RendererLivingEntity net/minecraft/client/renderer/entity
494 AbstractTexture net/minecraft/client/renderer/texture
495 DynamicTexture net/minecraft/client/renderer/texture
496 IconRegister net/minecraft/client/renderer/texture
527 FallbackResourceManager net/minecraft/client/resources
528 FileResourcePack net/minecraft/client/resources
529 FolderResourcePack net/minecraft/client/resources
FolderResourcePackFilter net/minecraft/client/resources
530 FoliageColorReloadListener net/minecraft/client/resources
531 GrassColorReloadListener net/minecraft/client/resources
532 GuiScreenTemporaryResourcePackSelect net/minecraft/client/resources
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
584 CommandHelp net/minecraft/command
585 CommandKill net/minecraft/command
586 CommandNotFoundException net/minecraft/command
587 CommandPlaySound net/minecraft/command
588 CommandServerBan net/minecraft/command
589 CommandServerBanIp net/minecraft/command
590 CommandServerBanlist net/minecraft/command
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
891 EntitySnowball net/minecraft/entity/projectile
892 EntityThrowable net/minecraft/entity/projectile
893 EntityWitherSkull net/minecraft/entity/projectile
894 AnimalChest net/minecraft/inventory
895 Container net/minecraft/inventory
896 ContainerBeacon net/minecraft/inventory
897 ContainerBrewingStand net/minecraft/inventory
900 ContainerEnchantment net/minecraft/inventory
901 ContainerFurnace net/minecraft/inventory
902 ContainerHopper net/minecraft/inventory
903 ContainerHorseInventory net/minecraft/inventory
904 ContainerHorseInventorySlotArmor net/minecraft/inventory
905 ContainerHorseInventorySlotSaddle net/minecraft/inventory
906 ContainerMerchant net/minecraft/inventory
907 ContainerPlayer net/minecraft/inventory
908 ContainerRepair net/minecraft/inventory
929 SlotEnchantmentTable net/minecraft/inventory
930 SlotFurnace net/minecraft/inventory
931 SlotMerchantResult net/minecraft/inventory
AnimalChest net/minecraft/inventroy
ContainerHorseInventory net/minecraft/inventroy
ContainerHorseInventorySlotArmor net/minecraft/inventroy
ContainerHorseInventorySlotSaddle net/minecraft/inventroy
932 BehaviorDispenseArmor net/minecraft/item
933 BehaviorDispenseMinecart net/minecraft/item
934 EnumAction net/minecraft/item
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
+4170 -3738
View File
File diff suppressed because it is too large. Load diff
+164 -111
View File
@@ -1,95 +1,51 @@
diff -r -U 3 minecraft\net\minecraft\client\Minecraft.java minecraft_patched\net\minecraft\client\Minecraft.java
--- minecraft\net\minecraft\client\Minecraft.java Sat Apr 27 01:53:03 2013
+++ minecraft_patched\net\minecraft\client\Minecraft.java Sat Apr 27 01:55:19 2013
@@ -532,9 +532,8 @@
return;
}
- while(true) {
try {
- if(this.field_71425_J) {
+ while(this.field_71425_J) {
if(this.field_71434_R && this.field_71433_S != null) {
this.func_71377_b(this.field_71433_S);
return;
@@ -552,7 +551,6 @@
this.func_71373_a(new GuiMemoryErrorScreen());
System.gc();
}
- continue;
}
} catch (MinecraftError var12) {
;
@@ -570,8 +568,6 @@
this.func_71405_e();
}
- return;
- }
}
private void func_71411_J() {
diff -r -U 3 minecraft\net\minecraft\src\CallableSuspiciousClasses.java minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java
--- minecraft\net\minecraft\src\CallableSuspiciousClasses.java Sat Apr 27 01:53:04 2013
+++ minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java Sat Apr 27 01:55:19 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() {
public String func_85085_a() throws SecurityException, NoSuchFieldException, IllegalAccessException, IllegalArgumentException {
StringBuilder var1 = new StringBuilder();
- Field var2 = ClassLoader.class.getDeclaredField("classes");
- var2.setAccessible(true);
+ ArrayList var3;
+ try {
Field var2 = ClassLoader.class.getDeclaredField("classes");
var2.setAccessible(true);
- ArrayList var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ ArrayList var3;
+ try {
+ Field var2 = ClassLoader.class.getDeclaredField("classes");
+ var2.setAccessible(true);
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ } catch(Exception ex) {
+ return "";
+ }
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ } catch(Exception ex) {
+ return "";
+ }
boolean var4 = true;
boolean var5 = !CrashReport.class.getCanonicalName().equals("net.minecraft.CrashReport");
HashMap var6 = new HashMap();
diff -r -U 3 minecraft\net\minecraft\src\CodecMus.java minecraft_patched\net\minecraft\src\CodecMus.java
--- minecraft\net\minecraft\src\CodecMus.java Sat Apr 27 01:53:04 2013
+++ minecraft_patched\net\minecraft\src\CodecMus.java Sat Apr 27 01:55:19 2013
@@ -1,5 +1,6 @@
package net.minecraft.src;
@@ -98,6 +103,10 @@
+import java.io.IOException;
import java.io.InputStream;
import net.minecraft.src.MusInputStream;
import paulscode.sound.codecs.CodecJOrbis;
@@ -7,6 +8,10 @@
public class CodecMus extends CodecJOrbis {
protected InputStream openInputStream() {
- return new MusInputStream(this, this.url, this.urlConnection.getInputStream());
+ try {
+ return new MusInputStream(this, this.url, this.urlConnection.getInputStream());
+ } catch (IOException e) {
+ return null;
+ }
// $FF: synthetic method
public Object call() {
+ try {
return this.func_85085_a();
+ } catch(Exception ex) {
+ return null;
+ }
}
}
diff -r -U 3 minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java
--- minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java Sat Apr 27 01:53:04 2013
+++ minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Sat Apr 27 01:55:19 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 {
+ public ComponentStrongholdRightTurn(int p_i3843_1_, Random p_i3843_2_, StructureBoundingBox p_i3843_3_, int p_i3843_4_) {
+ super(p_i3843_1_, p_i3843_2_, p_i3843_3_, p_i3843_4_);
+ public ComponentStrongholdRightTurn(int p_i2074_1_, Random p_i2074_2_, StructureBoundingBox p_i2074_3_, int p_i2074_4_) {
+ super(p_i2074_1_, p_i2074_2_, p_i2074_3_, p_i2074_4_);
+ }
+
public void func_74861_a(StructureComponent p_74861_1_, List p_74861_2_, Random p_74861_3_) {
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 Sat Apr 27 01:53:04 2013
+++ minecraft_patched\net\minecraft\src\DedicatedServer.java Sat Apr 27 01:55:19 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);
}
@@ -99,21 +55,55 @@ diff -r -U 3 minecraft\net\minecraft\src\DedicatedServer.java minecraft_patched\
this.func_71333_ah();
}
diff -r -U 3 minecraft\net\minecraft\src\EnumChatFormatting.java minecraft_patched\net\minecraft\src\EnumChatFormatting.java
--- minecraft\net\minecraft\src\EnumChatFormatting.java Sat Apr 27 01:53:05 2013
+++ minecraft_patched\net\minecraft\src\EnumChatFormatting.java Sat Apr 27 01:55:19 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;
private EnumChatFormatting(char p_i10000_3_) {
- this(p_i10000_1_, p_i10000_2_, p_i10000_3_, false);
+ this(p_i10000_3_, false);
private EnumChatFormatting(char p_i1336_3_) {
- this(p_i1336_1_, p_i1336_2_, p_i1336_3_, false);
+ this(p_i1336_3_, false);
}
private EnumChatFormatting(char p_i10001_3_, boolean p_i10001_4_) {
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 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() {
this.close();
+ try {
super.finalize();
+ } catch(Throwable t) {
+ }
}
public void close() {
if(this.field_110600_d != null) {
+ try {
this.field_110600_d.close();
+ } catch(Exception ex) {
+ }
this.field_110600_d = null;
}
diff -r -U 3 minecraft\net\minecraft\src\FolderResourcePack.java minecraft_patched\net\minecraft\src\FolderResourcePack.java
--- 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/");
if(var2.isDirectory()) {
- File[] var3 = var2.listFiles(DirectoryFileFilter.DIRECTORY);
+ File[] var3 = var2.listFiles((java.io.FileFilter)DirectoryFileFilter.DIRECTORY);
int var4 = var3.length;
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 Sat Apr 27 01:53:05 2013
+++ minecraft_patched\net\minecraft\src\FontRenderer.java Sat Apr 27 01:55:19 2013
@@ -621,8 +621,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;
@@ -122,19 +112,19 @@ diff -r -U 3 minecraft\net\minecraft\src\FontRenderer.java minecraft_patched\net
case 167:
if(var5 < var3 - 1) {
++var5;
@@ -636,6 +634,8 @@
@@ -645,6 +643,8 @@
}
}
break;
+ case 32:
+ var6 = var5;
+ var6 = var5;
default:
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 Sat Apr 27 01:53:05 2013
+++ minecraft_patched\net\minecraft\src\IntegratedServer.java Sat Apr 27 01:55:19 2013
@@ -101,7 +101,7 @@
--- 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;
}
@@ -143,9 +133,60 @@ diff -r -U 3 minecraft\net\minecraft\src\IntegratedServer.java minecraft_patched
boolean var1 = this.field_71348_o;
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 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;
}
- while(true) {
- try {
+ try {
+ while(this.field_71425_J) {
if(this.field_71425_J) {
if(this.field_71434_R && this.field_71433_S != null) {
this.func_71377_b(this.field_71433_S);
@@ -626,23 +626,20 @@
}
continue;
}
- } catch (MinecraftError var12) {
- ;
- } catch (ReportedException var13) {
- this.func_71396_d(var13.func_71575_a());
- this.func_71398_f();
- var13.printStackTrace();
- this.func_71377_b(var13.func_71575_a());
- } catch (Throwable var14) {
- var2 = this.func_71396_d(new CrashReport("Unexpected error", var14));
- this.func_71398_f();
- var14.printStackTrace();
- this.func_71377_b(var2);
- } finally {
- this.func_71405_e();
}
-
- return;
+ } catch (MinecraftError var12) {
+ } catch (ReportedException var13) {
+ this.func_71396_d(var13.func_71575_a());
+ this.func_71398_f();
+ var13.printStackTrace();
+ this.func_71377_b(var13.func_71575_a());
+ } catch (Throwable var14) {
+ var2 = this.func_71396_d(new CrashReport("Unexpected error", var14));
+ this.func_71398_f();
+ var14.printStackTrace();
+ this.func_71377_b(var2);
+ } finally {
+ this.func_71405_e();
}
}
diff -r -U 3 minecraft\net\minecraft\src\RConThreadClient.java minecraft_patched\net\minecraft\src\RConThreadClient.java
--- minecraft\net\minecraft\src\RConThreadClient.java Sat Apr 27 01:53:07 2013
+++ minecraft_patched\net\minecraft\src\RConThreadClient.java Sat Apr 27 01:55:19 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 @@
}
@@ -173,22 +214,21 @@ diff -r -U 3 minecraft\net\minecraft\src\RConThreadClient.java minecraft_patched
}
-
- return;
- }
+ } catch (SocketTimeoutException var17) {
+ } catch (IOException var18) {
+ } catch (Exception var19) {
+ System.out.println(var19);
+ } finally {
+ this.func_72653_g();
}
-
+ } catch (SocketTimeoutException var17) {
+ } catch (IOException var18) {
+ } catch (Exception var19) {
+ System.out.println(var19);
+ } finally {
+ this.func_72653_g();
+ }
}
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 Sat Apr 27 01:53:07 2013
+++ minecraft_patched\net\minecraft\src\RenderBlocks.java Sat Apr 27 01:55:19 2013
@@ -1951,16 +1951,16 @@
--- 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);
float var27 = (float)(p_78589_4_ + 1);
@@ -209,7 +249,7 @@ diff -r -U 3 minecraft\net\minecraft\src\RenderBlocks.java minecraft_patched\net
int var29 = 0;
int var30 = 0;
int var31 = 16;
@@ -2006,7 +2006,7 @@
@@ -2016,7 +2016,7 @@
var5.func_78374_a((double)var25, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var9.func_94214_a((double)var31), (double)var9.func_94207_b((double)var30));
var5.func_78374_a((double)var24, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var9.func_94214_a((double)var29), (double)var9.func_94207_b((double)var30));
var5.func_78374_a((double)var24, (double)p_78589_3_ + 0.015625D, (double)var27, (double)var9.func_94214_a((double)var29), (double)var9.func_94207_b((double)var32));
@@ -219,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 Sat Apr 27 01:53:07 2013
+++ minecraft_patched\net\minecraft\src\RenderGlobal.java Sat Apr 27 01:55:19 2013
@@ -1449,7 +1449,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_;
@@ -230,11 +270,26 @@ diff -r -U 3 minecraft\net\minecraft\src\RenderGlobal.java minecraft_patched\net
if(p_72726_1_.equals("hugeexplosion")) {
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 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() {}
public InputStream getInputStream() {
+ try {
return SoundPool.func_110655_a(this.field_110660_a).func_110536_a(this.field_110659_b).func_110527_b();
+ } catch(Exception ex) {
+ return null;
+ }
}
// $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 Sat Apr 27 01:53:07 2013
+++ minecraft_patched\net\minecraft\src\TcpMasterThread.java Sat Apr 27 01:55:19 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_i3285_1_;
this.field_74504_a = p_i1395_1_;
}
+ @SuppressWarnings("deprecation")
@@ -242,15 +297,13 @@ 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 Sat Apr 27 01:53:07 2013
+++ minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java Sat Apr 27 01:55:19 2013
@@ -20,7 +20,8 @@
--- 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 @@
}
public void run() {
- this.func_75736_b();
+ while(true)
+ this.func_75736_b();
+ while(true)
this.func_75736_b();
}
private void func_75736_b() {
+63 -66
View File
@@ -1,42 +1,52 @@
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 Sat Apr 27 01:54:18 2013
+++ minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java Sat Apr 27 01:56:15 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() {
public String func_85085_a() throws SecurityException, NoSuchFieldException, IllegalAccessException, IllegalArgumentException {
StringBuilder var1 = new StringBuilder();
- Field var2 = ClassLoader.class.getDeclaredField("classes");
- var2.setAccessible(true);
+ ArrayList var3;
+ try {
Field var2 = ClassLoader.class.getDeclaredField("classes");
var2.setAccessible(true);
- ArrayList var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ ArrayList var3;
+ try {
+ Field var2 = ClassLoader.class.getDeclaredField("classes");
+ var2.setAccessible(true);
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ } catch(Exception ex) {
+ return "";
+ }
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ } catch(Exception ex) {
+ return "";
+ }
boolean var4 = true;
boolean var5 = !CrashReport.class.getCanonicalName().equals("net.minecraft.CrashReport");
HashMap var6 = new HashMap();
@@ -98,6 +103,10 @@
// $FF: synthetic method
public Object call() {
- return this.func_85085_a();
+ try {
+ return this.func_85085_a();
+ } catch(Exception ex) {
+ return null;
+ }
}
}
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 Sat Apr 27 01:54:19 2013
+++ minecraft_server_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Sat Apr 27 01:56:15 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 {
+ public ComponentStrongholdRightTurn(int p_i3843_1_, Random p_i3843_2_, StructureBoundingBox p_i3843_3_, int p_i3843_4_) {
+ super(p_i3843_1_, p_i3843_2_, p_i3843_3_, p_i3843_4_);
+ public ComponentStrongholdRightTurn(int p_i2074_1_, Random p_i2074_2_, StructureBoundingBox p_i2074_3_, int p_i2074_4_) {
+ super(p_i2074_1_, p_i2074_2_, p_i2074_3_, p_i2074_4_);
+ }
+
public void func_74861_a(StructureComponent p_74861_1_, List p_74861_2_, Random p_74861_3_) {
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 Sat Apr 27 01:54:19 2013
+++ minecraft_server_patched\net\minecraft\src\DedicatedServer.java Sat Apr 27 01:56:15 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);
}
@@ -46,53 +56,43 @@ 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 Sat Apr 27 01:54:20 2013
+++ minecraft_server_patched\net\minecraft\src\EnumChatFormatting.java Sat Apr 27 01:56:15 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;
private EnumChatFormatting(char p_i10000_3_) {
- this(p_i10000_1_, p_i10000_2_, p_i10000_3_, false);
+ this(p_i10000_3_, false);
private EnumChatFormatting(char p_i1336_3_) {
- this(p_i1336_1_, p_i1336_2_, p_i1336_3_, false);
+ this(p_i1336_3_, false);
}
private EnumChatFormatting(char p_i10001_3_, boolean p_i10001_4_) {
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 Sat Apr 27 01:54:20 2013
+++ minecraft_server_patched\net\minecraft\src\MemoryConnection.java Sat Apr 27 01:56:15 2013
@@ -2,6 +2,8 @@
import java.net.InetSocketAddress;
import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import net.minecraft.src.ILogAgent;
import net.minecraft.src.INetworkManager;
@@ -11,7 +13,7 @@
--- 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 {
private static final SocketAddress field_74444_a = new InetSocketAddress("127.0.0.1", 0);
- private final List field_74442_b;
+ private final List field_74442_b = Collections.synchronizedList(new ArrayList());
+ private final List field_74442_b = java.util.Collections.synchronizedList(new java.util.ArrayList());
private final ILogAgent field_98214_c;
private MemoryConnection field_74443_c;
private NetHandler field_74440_d;
@@ -19,6 +21,11 @@
private boolean field_74441_e;
private String field_74438_f;
private Object[] field_74439_g;
+ public MemoryConnection(ILogAgent p_i11025_1_, NetHandler p_i11025_2_) {
+ this.field_74440_d = p_i11025_2_;
+ this.field_98214_c = p_i11025_1_;
+
+ public MemoryConnection(ILogAgent p_i1392_1_, NetHandler p_i1392_2_) {
+ this.field_74440_d = p_i1392_2_;
+ this.field_98214_c = p_i1392_1_;
+ }
+
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 Sat Apr 27 01:54:20 2013
+++ minecraft_server_patched\net\minecraft\src\RConThreadClient.java Sat Apr 27 01:56:15 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 @@
}
@@ -120,23 +120,22 @@ diff -r -U 3 minecraft_server\net\minecraft\src\RConThreadClient.java minecraft_
}
-
- return;
- }
+ } catch (SocketTimeoutException var17) {
+ } catch (IOException var18) {
+ } catch (Exception var19) {
+ System.out.println(var19);
+ } finally {
+ this.func_72653_g();
}
-
+ } catch (SocketTimeoutException var17) {
+ } catch (IOException var18) {
+ } catch (Exception var19) {
+ System.out.println(var19);
+ } finally {
+ this.func_72653_g();
+ }
}
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 Sat Apr 27 01:54:21 2013
+++ minecraft_server_patched\net\minecraft\src\TcpMasterThread.java Sat Apr 27 01:56:15 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_i3285_1_;
this.field_74504_a = p_i1395_1_;
}
+ @SuppressWarnings("deprecation")
@@ -144,15 +143,13 @@ 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 Sat Apr 27 01:54:21 2013
+++ minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java Sat Apr 27 01:56:15 2013
@@ -20,7 +20,8 @@
--- 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 @@
}
public void run() {
- this.func_75736_b();
+ while(true)
+ this.func_75736_b();
+ while(true)
this.func_75736_b();
}
private void func_75736_b() {
+3 -3
View File
@@ -1,4 +1,4 @@
[VERSION]
MCPVersion = 7.51
ClientVersion = 1.5.2
ServerVersion = 1.5.2
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>
+14 -12
View File
@@ -75,13 +75,13 @@ 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)
if not work_dir is None:
version_dir = os.path.join(work_dir, 'versions', version)
mc_info['natives_dir'] = os.path.join(work_dir, 'libraries', 'natives')
mc_info['natives_dir'] = os.path.join(version_dir, '%s-natives' % version)
mc_info['library_dir'] = os.path.join(work_dir, 'libraries')
mc_info['client_file'] = os.path.join(version_dir, '%s.jar' % version)
mc_info['json_file'] = os.path.join(version_dir, '%s.json' % version)
@@ -272,7 +272,7 @@ def file_backup(file, md5=None):
if os.path.isfile(src):
if not get_md5(src) == md5 and not md5 is None:
print 'Modified %s detected, removing' % os.path.basename(src_jar)
print 'Modified %s detected, removing' % os.path.basename(src)
os.remove(src)
else:
shutil.copy(src, bck)
@@ -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)
@@ -672,7 +673,7 @@ def create_merged_conf(mcp_dir, fml_dir):
#Creates the merged conf folder from MCP's conf folder to fml_dir/conf
#Lets grab the files we dont work on
for file in ['version.cfg', 'newids.csv', 'joined.exc']:
for file in ['version.cfg', 'joined.exc']:
dst_file = os.path.join(fml_dir, 'conf', file)
src_file = os.path.join(mcp_dir, 'conf', file)
if not os.path.isdir(os.path.dirname(dst_file)):
@@ -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)
@@ -1016,8 +1017,8 @@ def decompile_minecraft(fml_dir, mcp_dir, disable_at=False, disable_merge=False,
Commands.applyss = applyss_shunt
Commands.checkjars = checkjars_shunt
#decompile -d -n -r
# Conf JAD CSV -r -d -a -n -p -o -l -g -c -s --rg
decompile(None, False, False, True, True, False, True, False, False, False, False, not disable_client, enable_server, False)
# Conf JAD CSV -r -d -a -n -p -o -l -g -c -s --rg --workDir --json(None=compute) --nocopy
decompile(None, False, False, True, True, False, True, False, False, False, False, not disable_client, enable_server, False, os.path.join(mcp_dir,'jars'), None, True)
reset_logger()
os.chdir(fml_dir)
post_decompile(mcp_dir, fml_dir)
@@ -1034,7 +1035,7 @@ def decompile_minecraft(fml_dir, mcp_dir, disable_at=False, disable_merge=False,
cleanup_source(src_dir)
os.chdir(mcp_dir)
commands = Commands(verify=True)
commands = Commands(verify=True,workdir=os.path.join(mcp_dir,'jars'))
if not disable_client:
updatemd5_side(mcp_dir, commands, CLIENT)
@@ -1130,6 +1131,7 @@ def download_minecraft(mcp_dir, fml_dir, version=None):
# Remove any invalid files
for type in ['client', 'server']:
print("Backing up %s"%type)
file_backup(mc_info['%s_file' % type], mc_info['%s_md5' % type])
failed = not download_file(mc_info['%s_url' % type], mc_info['%s_file' % type], mc_info['%s_md5' % type]) or failed
file_backup(mc_info['%s_file' % type], mc_info['%s_md5' % type])
@@ -1144,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
@@ -1237,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)
@@ -1284,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 "$@"
+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-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"
}
+127
View File
@@ -0,0 +1,127 @@
{
"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/"
},
{
"name": "net.minecraft:launchwrapper:1.3",
"serverreq":true
},
{
"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.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.
+22 -1
View File
@@ -1,5 +1,5 @@
[default]
current_ver = 1.6
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
@@ -100,3 +100,24 @@ server_md5 = 7c03305c8bf97a8e8f3cdb147fc90607
mcp_ver = 8.01
mcp_url =
mcp_md5 = 39da81bbb4d73b3f5e2d1f8f5682cdb9
[1.6.1]
client_md5 = 3c56fb4b77b1ca37dde69b5eb896fc4d
server_md5 = ff8f81970a5955737c356b534d3aee96
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 =
@@ -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()
@@ -725,6 +736,7 @@
@@ -733,6 +744,7 @@
{
this.func_71405_e();
}
@@ -54,7 +54,7 @@
}
private void func_71411_J()
@@ -793,9 +805,11 @@
@@ -801,9 +813,11 @@
if (!this.field_71454_w)
{
@@ -66,7 +66,7 @@
}
GL11.glFlush();
@@ -1317,10 +1331,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();
@@ -1771,6 +1789,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();
}
@@ -1794,8 +1814,27 @@
@@ -1808,8 +1828,27 @@
}
this.field_71413_E.func_77450_a(StatList.field_75936_f, 1);
@@ -1,11 +0,0 @@
--- ../src-base/minecraft/net/minecraft/client/gui/GuiErrorScreen.java
+++ ../src-work/minecraft/net/minecraft/client/gui/GuiErrorScreen.java
@@ -22,6 +22,8 @@
this.field_73887_h.add(new GuiButton(0, this.field_73880_f / 2 - 100, 140, I18n.func_135053_a("gui.cancel")));
}
+ public GuiErrorScreen(){}
+
public void func_73863_a(int p_73863_1_, int p_73863_2_, float p_73863_3_)
{
this.func_73733_a(0, 0, this.field_73880_f, this.field_73881_g, -12574688, -11530224);
@@ -15,8 +15,8 @@
+import java.util.List;
import java.util.Random;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.Tessellator;
@@ -23,6 +26,9 @@
import net.minecraft.client.mco.ExceptionMcoService;
@@ -26,6 +29,9 @@
import org.apache.commons.io.Charsets;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.Project;
@@ -26,7 +26,7 @@
@SideOnly(Side.CLIENT)
public class GuiMainMenu extends GuiScreen
@@ -52,6 +58,8 @@
@@ -55,6 +61,8 @@
private ResourceLocation field_110351_G;
private GuiButton field_130023_H;
@@ -35,7 +35,7 @@
public GuiMainMenu()
{
BufferedReader bufferedreader = null;
@@ -203,13 +211,22 @@
@@ -206,13 +214,22 @@
private void func_130022_h()
{
this.field_130023_H.field_73748_h = true;
@@ -59,7 +59,7 @@
this.field_130023_H.field_73748_h = false;
}
@@ -256,6 +273,11 @@
@@ -259,6 +276,11 @@
if (p_73875_1_.field_73741_f == 4)
{
this.field_73882_e.func_71400_g();
@@ -71,7 +71,7 @@
}
if (p_73875_1_.field_73741_f == 11)
@@ -492,7 +514,16 @@
@@ -520,7 +542,16 @@
s = s + " Demo";
}
@@ -1,44 +1,46 @@
--- ../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();
+ private static byte connectionCompatibilityLevel;
+
public NetClientHandler(Minecraft p_i3103_1_, String p_i3103_2_, int p_i3103_3_) throws IOException
public NetClientHandler(Minecraft p_i1176_1_, String p_i1176_2_, int p_i1176_3_) throws IOException
{
this.field_72563_h = p_i3103_1_;
Socket socket = new Socket(InetAddress.getByName(p_i3103_2_), p_i3103_3_);
this.field_72555_g = new TcpConnection(p_i3103_1_.func_98033_al(), socket, "Client", this);
+ FMLNetworkHandler.onClientConnectionToRemoteServer(this, p_i3103_2_, p_i3103_3_, this.field_72555_g);
this.field_72563_h = p_i1176_1_;
Socket socket = new Socket(InetAddress.getByName(p_i1176_2_), p_i1176_3_);
this.field_72555_g = new TcpConnection(p_i1176_1_.func_98033_al(), socket, "Client", this);
+ FMLNetworkHandler.onClientConnectionToRemoteServer(this, p_i1176_2_, p_i1176_3_, this.field_72555_g);
}
public NetClientHandler(Minecraft p_i11012_1_, String p_i11012_2_, int p_i11012_3_, GuiScreen p_i11012_4_) throws IOException
@@ -214,6 +218,7 @@
this.field_98183_l = p_i11012_4_;
Socket socket = new Socket(InetAddress.getByName(p_i11012_2_), p_i11012_3_);
this.field_72555_g = new TcpConnection(p_i11012_1_.func_98033_al(), socket, "Client", this);
+ FMLNetworkHandler.onClientConnectionToRemoteServer(this, p_i11012_2_, p_i11012_3_, this.field_72555_g);
public NetClientHandler(Minecraft p_i1177_1_, String p_i1177_2_, int p_i1177_3_, GuiScreen p_i1177_4_) throws IOException
@@ -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);
+ FMLNetworkHandler.onClientConnectionToRemoteServer(this, p_i1177_2_, p_i1177_3_, this.field_72555_g);
}
public NetClientHandler(Minecraft p_i3104_1_, IntegratedServer p_i3104_2_) throws IOException
@@ -221,6 +226,7 @@
this.field_72563_h = p_i3104_1_;
this.field_72555_g = new MemoryConnection(p_i3104_1_.func_98033_al(), this);
p_i3104_2_.func_71343_a().func_71754_a((MemoryConnection)this.field_72555_g, p_i3104_1_.func_110432_I().func_111285_a());
+ FMLNetworkHandler.onClientConnectionToIntegratedServer(this, p_i3104_2_, this.field_72555_g);
public NetClientHandler(Minecraft p_i1178_1_, IntegratedServer p_i1178_2_) throws IOException
@@ -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());
+ FMLNetworkHandler.onClientConnectionToIntegratedServer(this, p_i1178_2_, this.field_72555_g);
}
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;
}
@@ -1,111 +0,0 @@
--- ../src-base/minecraft/net/minecraft/client/renderer/RenderEngine.java
+++ ../src-work/minecraft/net/minecraft/client/renderer/RenderEngine.java
@@ -1,8 +1,11 @@
package net.minecraft.client.renderer;
+import cpw.mods.fml.client.TextureFXManager;
+import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.awt.Color;
+import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
@@ -11,6 +14,9 @@
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
import javax.imageio.ImageIO;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.TextureMap;
@@ -37,6 +43,8 @@
private final TextureMap field_94155_m;
private int field_94153_n;
+ public static Logger log = FMLLog.getLogger();
+
public RenderEngine(TexturePackList p_i3192_1_, GameSettings p_i3192_2_)
{
this.field_78366_k = p_i3192_1_;
@@ -87,14 +95,17 @@
}
else
{
- aint1 = this.func_78348_b(this.func_78345_a(inputstream));
+ BufferedImage bufferedimage = this.func_78345_a(inputstream);
+ TextureFXManager.instance().fixTransparency(bufferedimage, p_78346_1_);
+ aint1 = this.func_78348_b(bufferedimage);
}
this.field_78359_d.put(p_78346_1_, aint1);
return aint1;
}
- catch (IOException ioexception)
- {
+ catch (Exception ioexception)
+ {
+ log.log(Level.INFO, String.format("An error occured reading texture file %s (getTexture)", p_78346_1_), ioexception);
ioexception.printStackTrace();
int[] aint2 = this.func_78348_b(this.field_78364_l);
this.field_78359_d.put(p_78346_1_, aint2);
@@ -162,6 +173,7 @@
try
{
int i = GLAllocation.func_74528_a();
+ TextureFXManager.instance().bindTextureToName(p_78341_1_, i);
boolean flag = p_78341_1_.startsWith("%blur%");
if (flag)
@@ -184,7 +196,9 @@
}
else
{
- this.func_98184_a(this.func_78345_a(inputstream), i, flag, flag1);
+ BufferedImage bufferedimage = this.func_78345_a(inputstream);
+ TextureFXManager.instance().fixTransparency(bufferedimage, p_78341_1_);
+ this.func_98184_a(bufferedimage, i, flag, flag1);
}
this.field_78362_c.put(s1, Integer.valueOf(i));
@@ -240,6 +254,7 @@
int j = p_98184_1_.getWidth();
int k = p_98184_1_.getHeight();
+ TextureFXManager.instance().setTextureDimensions(p_98184_2_, j, k);
int[] aint = new int[j * k];
p_98184_1_.getRGB(0, 0, j, k, aint, 0, j);
@@ -412,10 +427,12 @@
}
BufferedImage bufferedimage1 = this.func_78345_a(itexturepack.func_77532_a(s));
+ TextureFXManager.instance().fixTransparency(bufferedimage1, s);
this.func_98184_a(bufferedimage1, j, flag, flag1);
}
- catch (IOException ioexception)
- {
+ catch (Exception ioexception)
+ {
+ log.log(Level.INFO,String.format("An error occured reading texture file %s (refreshTexture)", s), ioexception);
ioexception.printStackTrace();
}
}
@@ -429,10 +446,12 @@
try
{
bufferedimage = this.func_78345_a(itexturepack.func_77532_a(s));
+ TextureFXManager.instance().fixTransparency(bufferedimage, s);
this.func_78340_a(bufferedimage, (int[])this.field_78359_d.get(s));
}
- catch (IOException ioexception1)
- {
+ catch (Exception ioexception1)
+ {
+ log.log(Level.INFO,String.format("An error occured reading texture file data %s (refreshTexture)", s), ioexception1);
ioexception1.printStackTrace();
}
}
@@ -1,63 +0,0 @@
--- ../src-base/minecraft/net/minecraft/client/renderer/texture/Texture.java
+++ ../src-work/minecraft/net/minecraft/client/renderer/texture/Texture.java
@@ -1,5 +1,6 @@
package net.minecraft.client.renderer.texture;
+import cpw.mods.fml.client.TextureFXManager;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.awt.image.BufferedImage;
@@ -9,6 +10,8 @@
import javax.imageio.ImageIO;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.src.FMLRenderAccessLibrary;
+
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
@@ -206,6 +209,12 @@
{
if (this.field_94300_h != 32879)
{
+ if (field_94303_q && !p_94281_4_)
+ {
+ FMLRenderAccessLibrary.doTextureCopy(this, p_94281_3_, p_94281_1_, p_94281_2_);
+ return;
+ }
+
ByteBuffer bytebuffer = p_94281_3_.func_94273_h();
this.field_94302_r.position(0);
bytebuffer.position(0);
@@ -218,7 +227,7 @@
if (p_94281_4_)
{
- l = p_94281_2_ + (p_94281_3_.func_94276_e() - k);
+ l = p_94281_1_ + (p_94281_3_.func_94276_e() - k - 1); //BUGFIX: targetY -> targetX and -1
}
for (int k1 = 0; k1 < p_94281_3_.func_94275_d(); ++k1)
@@ -228,7 +237,7 @@
if (p_94281_4_)
{
- l1 = p_94281_1_ + k1 * this.field_94289_d * 4 + l * 4;
+ l1 = (p_94281_2_ + k1) * this.field_94289_d * 4 + l * 4; //BUGFIX: targetX -> targetY and parens
}
this.field_94302_r.put(l1 + 0, bytebuffer.get(i2 + 0));
@@ -378,4 +387,13 @@
{
return this.field_94302_r;
}
+
+ public void createAndUploadTexture()
+ {
+ this.field_94293_a = GL11.glGenTextures();
+ GL11.glBindTexture(this.field_94300_h, this.field_94293_a);
+ System.out.printf("Buffer %s %x %d is %s\n",field_94297_m, field_94300_h, field_94293_a, field_94302_r);
+ field_94302_r.position(field_94302_r.limit());
+ func_94285_g();
+ }
}
@@ -1,34 +0,0 @@
--- ../src-base/minecraft/net/minecraft/client/renderer/texture/TextureStitched.java
+++ ../src-work/minecraft/net/minecraft/client/renderer/texture/TextureStitched.java
@@ -1,5 +1,6 @@
package net.minecraft.client.renderer.texture;
+import cpw.mods.fml.client.TextureFXManager;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.BufferedReader;
@@ -56,6 +57,11 @@
this.field_94230_o = (float)(p_94218_4_ + p_94218_6_) / (float)p_94218_1_.func_94276_e() - f1;
this.field_94238_p = (float)p_94218_5_ / 16.0F;
this.field_94237_q = (float)p_94218_6_ / 16.0F;
+ TextureFXManager.instance().getHelper().doTextureUpload(this);
+ if (this.field_94227_c)
+ {
+ TextureFXManager.instance().getHelper().rotateTexture(this.field_94228_a, this.field_94228_a.func_94273_h());
+ }
}
public void func_94217_a(TextureStitched p_94217_1_)
@@ -198,4 +204,12 @@
this.field_94236_i = arraylist;
}
}
+
+ public void createAndUploadTextures()
+ {
+ for (Texture t : ((List<Texture>)field_94226_b))
+ {
+ t.createAndUploadTexture();
+ }
+ }
}
@@ -8,7 +8,7 @@
- {
- return this.func_85085_a();
- }
- catch (Exception e)
- catch (Exception ex)
- {
- return null;
- }
@@ -9,4 +9,4 @@
-@SideOnly(Side.CLIENT)
public interface IBossDisplayData
{
float func_70667_aM();
float func_110138_aP();
Loaded 100 of 119 files, more files were not shown because too many files have changed in this diff. Show more