Compare commits

..
91 Commits
Author SHA1 Message Date
Christian 95f7345ff7 First draft of 1.6 update 2013-06-29 13:33:14 -04:00
Christian bc02f3e67b New mappings for marker 2013-06-29 09:20:59 -04:00
Christian 8db42c44bf Tweak missing mapping 2013-06-29 09:20:59 -04:00
LexManos 404e6f1cc0 Add support for alternative maven servers in libraries.
Also download sources for public libraries, and atach them in eclipse. DOCUMENTATION!! YAYA!
2013-06-29 02:54:29 -07:00
LexManos 5741f669d5 Base GenDiff off deobf data's class list instead of the merged jar. Add option to delete target files that generate patches. 2013-06-29 01:40:01 -07:00
LexManos 6a67149b16 Add Clean Server/Client launcher. Update Start.java to new Main class and login system. 2013-06-28 22:12:07 -07:00
LexManos c8d934bafd Update eclipse projects for new libraries dependancies, and update packages for new 1.6 classes. 2013-06-28 20:31:02 -07:00
LexManos 075e240303 Add suggestions output if it can. 2013-06-27 22:58:00 -07:00
LexManos d00665ee65 Fixed update_packages.py for new folder strcture. 2013-06-27 22:30:40 -07:00
LexManos ebb74a5f30 Add missing argument 2013-06-27 22:29:10 -07:00
LexManos 5b0117ec76 Re-wrote/orginized a lot of fml.py. Almost everything is re-written/moved.
This is done in preperation for MCP to roll out SpecialSource support and the new 1.6 structure.
Also done for my sanity while reading through the code.

Intruduced a new function. If there is a 'mcp_data' folder in the FML folder, it will be copied to the MCP work directory after MCP is extracted.
It DOES overwrite anything that already exists.
This is intended for places like BuildServer to place libraries/assets to prevent them from needing to be downloaded every version.

Introduced a dev-env json. Need to write the eclipse workspace references to the new libraries.
Out custom json includes asm and legacylauncher.

Added proper OptionParsing to decompile.py
2013-06-27 20:48:52 -07:00
Christian e06d9d0fbc Add a simple property annotation system for mods. 2013-06-27 08:40:31 -04:00
Christian ab91647546 Changed to the EventHandler annotation universally, documentation and stuff. 2013-06-26 14:52:56 -04:00
Christian b236a4a4db Fixes, so it builds again.. 2013-06-24 16:30:18 -04:00
Christian a480a83a98 Ignore binpatch 2013-06-24 16:03:54 -04:00
LexManos 3a9f123a16 Add filter support for MCPMerger, and filter out libraries from the server's 'fat jar'. 2013-06-23 23:06:25 -07:00
LexManos 8d27fb0692 Upgraded minecraft downloader to work with new launcher's asset/library system
New parameter:
  --no-assets: Disables the downloading of minecraft's asset tree, recomended that build servers supply this flag to prevent downloading of useless data.
2013-06-20 16:23:15 -07:00
Christian d369fe1c25 No more debug please 2013-06-15 01:11:29 -04:00
Christian 98b71f2dd4 Fix build script. Add a sample JSON file. You'll need the newest Launcher code to run this. 2013-06-14 21:00:15 -04:00
Christian fef0f6422d More fixups for new launcher model 2013-06-14 20:45:52 -04:00
Christian 2eb81ac88b Merge in binpatch and use launcher 2013-06-14 17:21:49 -04:00
Christian e02a91f008 More tweaks 2013-06-14 09:32:51 -04:00
Christian ced1b95155 Server side tested and working. Setup is complex atm. That will change. 2013-06-13 09:57:55 -04:00
Christian 8f910dfa5d First cut of runtime binary patching. Needs some work to actually test it in a real scenario.. 2013-06-12 08:53:10 -04:00
Christian 05a854cd2a Small tweaks to the mcp data. Nothing major.. 2013-06-11 14:47:23 -04:00
Christian 22738de028 Attempt to properly fix deadlock if the internal server derps. It should never hang now. Damn you fast computer.. 2013-06-11 14:41:19 -04:00
Christian cd0466395a Fix sysout with trailing messages after a newline 2013-06-06 11:52:15 -04:00
Christian 24c4056651 Add in an optional modid identifier for @SidedProxy. It's main use is when both scala and java @Mods reside in the
same package, and you want the @SidedProxy behaviour for a specific @Mod language type. In general it should not be needed otherwise.
2013-06-06 10:05:34 -04:00
Christian 59fe905695 Don't continue trying to send events to mods that depend on errored mods. 2013-06-04 13:59:04 -04:00
Christian 6f3da97365 Don't throw an exception if the scala adapter find a java proxy. I may add some distinguishers to @SidedProxy so you know which mod it's for. 2013-06-04 12:51:46 -04:00
Christian edc1fb24e2 Send the "suspect list", and print the suspect versions 2013-05-27 11:03:23 -04:00
Christian f1d68ed4c8 Throw the sorting exception 2013-05-27 10:46:22 -04:00
Christian ac97370f94 Add in a pretty sorting error screen 2013-05-27 10:28:00 -04:00
Christian 82e9de8641 More tweaks to the mod sorting code 2013-05-27 10:09:51 -04:00
Christian 843a13c1ab Try and clean up cycle detection output a bit 2013-05-27 09:25:50 -04:00
Christian 3bf50c4bbe Fix server side derp with Forge network packet handler 2013-05-21 11:01:50 -04:00
Christian 4922e90d81 Separate network mod config from setup. Allows for Forge Packet Handler nicety 2013-05-20 21:40:42 -04:00
cpw a3a920437f Merge pull request #230 from fnuecke/master
Alternative setter logic for @SidedProxy in Scala classes/mods.
2013-05-11 15:34:37 -07:00
LexManos 787c0c4a6a Don't spit error on LWJGL not supporting 4.3 just warning. 2013-05-11 10:55:39 -07:00
Florian Nücke 8517a824e5 Merge declaration and initialization of a variable. 2013-05-08 20:16:15 +02:00
Florian Nücke 2cca7aa759 Some more Scala @SidedProxy adjustments. Now properly supporting pure singletons, i.e.
object C {
  @SidedProxy(...)
  var proxy: P = null
}
Removed fallback, as all such singletons are properly handled by the new code now, and class implementations fall back to the code also used for plain Java mods.
2013-05-08 19:04:35 +02:00
Florian Nücke 23b070c7d0 Alternative @SidedProxy setter for Scala. 2013-05-08 05:36:28 +02:00
LexManos 49111e9c5c Add version detection to astyle and print error if it doesnt detect version 2.0+
Also fixed astyle's config for max-instatement-indent that sometimes caused crashes with certian versions of astyle.
2013-05-03 14:26:27 -07:00
cpw c0cca7f41d Merge pull request #227 from CovertJaguar/patch-1
Improved Entity Spawn Error
2013-04-29 22:10:53 -07:00
CovertJaguar 99bb50d8f8 Improved Entity Spawn Error 2013-04-29 20:41:20 -07:00
LexManos 00f00b17bf Fix scalac detection to actually use the located command instead of defaulting to 'scalac' 2013-04-28 16:35:23 -07:00
LexManos 62fdbad74c Update MCP's md5 for the fixed srg files. 2013-04-28 12:33:42 -07:00
Christian f0bba74a47 Update for minecraft 1.5.2 2013-04-27 01:24:06 -04:00
Christian cf9b5b445b Don't leave scala running in interactive mode. 2013-04-23 22:56:18 -04:00
LexManos aa200923f0 Fix patch derp. 2013-04-23 19:47:43 -07:00
Christian ddadf93ca1 Fix when an old scalac is present on the system to not fail the build 2013-04-23 22:43:51 -04:00
Christian 781c681216 Some fixups for scala compilation in MCP. Scala should now be compilable and reobfuscatable with srgnames in MCP. 2013-04-23 07:40:49 -04:00
Christian cfda7fc738 Fix URL for MCP 2013-04-23 07:22:25 -04:00
Christian 58ba24add2 Fix possible NPEs in GameData 2013-04-22 21:14:34 -04:00
Christian dcf069ca52 Attempt to reduce lines on the screen for id mismatch. Hopefully prevents game crashes. 2013-04-22 21:14:34 -04:00
cpw c3fda11d10 Merge pull request #225 from MarcinSc/master
Suggested fix for issue 221
2013-04-21 11:32:51 -07:00
Marcin Sciesinski 11ac46daeb Fixing the GameRegistry. Now it is possible to register a Block with a BlockItem using following code:
MyBlock myBlock = new MyBlock();
GameRegistry.registerBlock(myBlock, MyBlockItem.class, "myBlock");
where MyBlockItem class has one constructor with signature:
public MyBlockItem(int id, Block block)
2013-04-21 19:01:18 +01:00
Christian 2dcabe0123 Add a to string to fmlmodcontainer: should mean less derpy cyclic dependency data 2013-04-21 13:58:18 -04:00
cpw 42f1d87955 Merge pull request #224 from Glought/master
Fix for  Issue #223
2013-04-21 08:13:54 -07:00
Glought 334a76de75 Update FMLDeobfuscatingRemapper.java
Fixes a "Type mismath:cannot convert from element type Object to FieldNode" error at line 176.
2013-04-21 05:09:19 -07:00
Christian 677a6e578e Fix scala supporting SidedProxy. It should work now. 2013-04-20 23:31:22 -04:00
Christian a3b5eaacfd Fix a small modloader compatibility derp: closes #222 2013-04-20 22:55:56 -04:00
Christian b3d4ea05ec Fix possible NPE in findItemStack, closes #218 2013-04-17 07:55:33 -04:00
Christian 8f35adca7a Use more expressive language when a version specifier is a simple unbounded above condition 2013-04-16 13:46:55 -04:00
Christian 394f424185 Fix to output versions in crash logs 2013-04-16 13:46:55 -04:00
cpw ada52078c7 Merge pull request #216 from agaricusb/add-srgname
Add srgname to registerTileEntityWithAlternatives
2013-04-15 15:50:47 -07:00
Christian 0daf1a6df4 Merge branch 'agaricusb-fix-deobf-field' 2013-04-15 17:31:09 -04:00
Christian edffd04ed2 Add in some caching of the read field descriptions for efficiency 2013-04-15 17:30:35 -04:00
Agaricus 7aea09f4ca Add type info to properly deobfuscate overloaded fields. Fixes #210. 2013-04-14 16:54:11 -07:00
Agaricus 5673c1dd29 Add srgname to registerTileEntityWithAlternatives 2013-04-14 14:11:37 -07:00
Christian 1774e2bf30 MCP names update 2013-04-10 12:28:20 -04:00
LexManos 4836b3272a Re-worked the Texture patches, optifine helper function, and re-added support for dynamically rotating the texture for mod authors who do things horribly wrong. 2013-04-09 20:06:41 -07:00
Christian a31607ae7d Fix compilation derp, and clean up rotation helper. 2013-04-09 21:20:31 -04:00
Christian 57ad221cc6 And add the patches *sigh* 2013-04-09 20:26:10 -04:00
Christian 00c7883088 Very significant improvement in performance by using glSubImage to upload data. Inspired by frequent complaints about performance of hires
texture packs. They probably still need a beefy system but should work. Hopefully I can figure out why the subImage GL side copy isn't working
properly for an even more significant speed boost. But this gets things started.
2013-04-09 20:15:14 -04:00
LexManos 1de89525cc Fixed issue with instalation when java/javac commands had quotes. 2013-04-05 10:26:33 -07:00
LexManos 704a70902f Sanitize input to isRemappedClass to use '/' as a package seperator like the srg files. 2013-04-04 23:30:10 -07:00
LexManos 570faeb790 Added the ability to save transformed classes to disc for debugging. 2013-04-04 10:32:48 -07:00
Christian 8b8837c9ff Fix NPE when branding isn't present 2013-03-31 10:01:46 -04:00
Christian eff464cf0e And the core patches for that 2013-03-30 12:13:53 -04:00
Christian 26ccb9106e Change snooper/crash report brand handling. fmlbranding now loads another string! 2013-03-30 12:12:54 -04:00
Christian 0d84487412 Fix up derp in access transformer 2013-03-27 19:23:10 -04:00
Christian 2bc6a0666f Attempt to make any "default package" class public. This might fix problems with certain modloader mods that ship changes to vanilla classes. 2013-03-27 16:54:26 -04:00
Christian 82bc9f1b35 Add some information, and a log message letting you know it worked 2013-03-23 16:01:20 -04:00
Christian d73ac867df Add a mechanism to dump the registry- useful for mod developers. 2013-03-23 15:39:34 -04:00
Christian ede93d438f Validate supplied stack size 2013-03-23 15:10:13 -04:00
Christian 5e1949eb0e Clone the itemstack, and allow for passing in a stacksize 2013-03-23 14:58:25 -04:00
Christian 2d368c4c2e Itemstacks in the GameRegistry (manual registration by mods) 2013-03-23 14:48:57 -04:00
Christian d9db27275e Fix mismatch screen a bit. Should render more correctly now and
at least not be blank in a lot of circumstances..
2013-03-22 10:20:53 -04:00
cpw 591a25722b Merge pull request #208 from jrtc27/patch-1
Fixed FMLRelaunchLog's Newline Handling
2013-03-22 05:44:38 -07:00
James Clarke d1ff1967b5 Fixed FMLRelaunchLog's Newline Handling
System.out.println("\n") causes currentMessage to start with a newline character, which means idx will always be 0 from then on. Therefore if idx is 0 messages must still be logged, otherwise no more messages sent to stdout will be logged and they will just accumulate in currentMessage.
2013-03-22 09:19:39 +00:00
157 changed files with 9281 additions and 5875 deletions

No files matched your search

+3
View File
@@ -12,3 +12,6 @@ fmlbranding.properties
/mcp
/eclipse
/deobfuscation_data*.zip
/binpatch
/mcp_data/
/map_client.txt
+69
View File
@@ -0,0 +1,69 @@
{
"id": "FML152",
"time": "2013-03-20T12:00:00-04:00",
"releaseTime": "2013-03-20T12:00:00-04:00",
"type": "release",
"minecraftArguments": "${auth_player_name} ${auth_session} --gameDir ${game_directory} --assetsDir ${game_assets} --tweakClass cpw.mods.fml.common.launcher.FMLTweaker",
"libraries": [
{
"name": "cpw.mods:fml:5.2"
},
{
"name": "net.minecraft:launchwrapper:1.3"
},
{
"name": "net.sf.jopt-simple:jopt-simple:4.5"
},
{
"name": "argo:argo:2.25_fixed"
},
{
"name": "org.ow2.asm:asm-all:4.1"
},
{
"name": "org.lwjgl.lwjgl:lwjgl:2.9.0"
},
{
"name": "org.lwjgl.lwjgl:lwjgl_util:2.9.0"
},
{
"name": "net.java.jinput:jinput:2.0.5"
},
{
"name": "org.bouncycastle:bcprov-jdk15on:1.47"
},
{
"name": "com.google.guava:guava:14.0"
},
{
"name": "net.java.jutils:jutils:1.0.0"
},
{
"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"
}
+14
View File
@@ -9,6 +9,12 @@ included based on guidelines at
http://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html
with notices intact. The only change is a non-functional change of package name.
This software contains a partial repackaging of javaxdelta, a BSD licensed program for generating
binary differences and applying them, sourced from the subversion at http://sourceforge.net/projects/javaxdelta/
authored by genman, heikok, pivot.
The only changes are to replace some Trove collection types with standard Java collections, and repackaged.
=== MCP Data ===
This software includes data from the Minecraft Coder Pack (MCP), with kind permission
from them. The license to MCP data is not transitive - distribution of this data by
@@ -16,6 +22,14 @@ third parties requires independent licensing from the MCP team. This data is not
redistributable without permission from the MCP team.
=== Sharing ===
I grant permission for some parts of FML to be redistributed outside the terms of the LGPL, for the benefit of
the minecraft modding community. All contributions to these parts should be licensed under the same additional grant.
-- Runtime patcher --
License is granted to redistribute the runtime patcher code (common/cpw/mods/fml/patcher and subdirectories) under
any alternative open source license as classified by the OSI (http://opensource.org/licenses)
-- ASM transformers --
License is granted to redistribute the ASM transformer code (common/cpw/mods/fml/common/asm/ and subdirectories)
under any alternative open source license as classified by the OSI (http://opensource.org/licenses)
+115 -77
View File
@@ -15,8 +15,8 @@
<arg value="${mcp.home}" />
</exec>
<propertyfile file="fmlversion.properties">
<entry key="fmlbuild.build.number" type="int" value="${version.build}"/>
<entry key="fmlbuild.deobfuscation.hash" type="string" value="${deobf.checksum}"/>
<entry key="fmlbuild.build.number" type="int" value="${version.build}" />
<entry key="fmlbuild.deobfuscation.hash" type="string" value="${deobf.checksum}" />
</propertyfile>
</target>
@@ -34,11 +34,11 @@
<os family="Windows" />
</condition>
<condition property="mcp.exists">
<available file="${mcp.home}/runtime/commands.py"/>
<available file="${mcp.home}/runtime/commands.py" />
</condition>
<condition property="signature.exists">
<available file="${env.JENKINS_HOME}/fmlsigned.properties" />
</condition>
<condition property="signature.exists">
<available file="${env.JENKINS_HOME}/fmlsigned.properties"/>
</condition>
<property name="mcp.obfoutput" location="${mcp.home}/reobf" />
<property name="client.mcp.obfoutput" location="${mcp.obfoutput}/minecraft" />
<property name="mcp.srcdir" location="${mcp.home}/src" />
@@ -54,7 +54,7 @@
<condition property="version.build" value="${env.BUILD_NUMBER}" else="1">
<isset property="env.BUILD_NUMBER" />
</condition>
<available file="eclipse" property="eclipse.exists"/>
<available file="eclipse" property="eclipse.exists" />
</target>
<target name="makeversion" depends="buildenvsetup">
@@ -79,8 +79,11 @@
<target name="clean" depends="buildenvsetup,makeclean" if="mcp.exists">
<exec executable="${python.exe}" dir="${mcp.home}">
<arg value="${basedir}/decompile.py" />
<arg value="--mcp-dir" />
<arg value="${mcp.home}" />
<arg value="--fml-dir" />
<arg value="${basedir}" />
<arg value="--gen-conf" />
</exec>
</target>
@@ -89,19 +92,19 @@
<arg value="${mcp.home}/runtime/reobfuscate.py" />
</exec>
<fail message="Reobfuscation failed">
<condition>
<not>
<and>
<available file="${mcp.home}/temp/client.md5"/>
<available file="${mcp.home}/temp/client_reobf.md5"/>
</and>
</not>
</condition>
<condition>
<not>
<and>
<available file="${mcp.home}/temp/client.md5" />
<available file="${mcp.home}/temp/client_reobf.md5" />
</and>
</not>
</condition>
</fail>
<exec executable="${python.exe}" dir="${mcp.home}">
<arg value="${basedir}/generatechangedfilelist.py"/>
<arg value="${mcp.home}"/>
<arg value="${basedir}/difflist.txt"/>
<arg value="${basedir}/generatechangedfilelist.py" />
<arg value="${mcp.home}" />
<arg value="${basedir}/difflist.txt" />
</exec>
</target>
@@ -110,11 +113,11 @@
<arg value="${mcp.home}/runtime/recompile.py" />
</exec>
<fail message="Compilation failed">
<condition>
<not>
<available file="${mcp.home}/bin/minecraft/net/minecraft/client/Minecraft.class"/>
</not>
</condition>
<condition>
<not>
<available file="${mcp.home}/bin/minecraft/net/minecraft/client/Minecraft.class" />
</not>
</condition>
</fail>
</target>
@@ -132,7 +135,7 @@
<target name="merge-source" depends="buildenvsetup,merge-client,merge-common" />
<target name="build-universal" depends="buildenvsetup,merge-client,merge-common,reobfuscate,makeversion">
<target name="build-universal" depends="buildenvsetup,merge-client,merge-common,reobfuscate,makeversion,makebinpatches">
<condition property="universal.jarname" value="${modname}-universal-${version.minecraft}-${version}" else="${modname}-universal-${version.minecraft}-${version}-${version.branch}">
<equals arg1="${version.branch}" arg2="master" />
</condition>
@@ -140,19 +143,20 @@
<mkdir dir="${basedir}/target" />
<jar destfile="${basedir}/target/${universal.jarname}.zip" duplicate="preserve">
<manifest>
<attribute name="Main-Class" value="net.minecraft.server.MinecraftServer"/>
<attribute name="Class-Path" value="minecraft_server.jar"/>
<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" />
</manifest>
<fileset dir="${client.mcp.obfoutput}" includes="**/*.class" excludes="*.class"/>
<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" >
<fileset dir="${client.mcp.obfoutput}" includes="*.class"/>
<zipfileset dir="${basedir}" includes="fmlversion.properties"/>
<antcall target="signjar" />
<zip update="true" destfile="${basedir}/target/${universal.jarname}.zip">
<zipfileset dir="${basedir}/binpatch" prefix="binpatch" includes="**/*.binpatch"/>
<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="${basedir}" includes="install/CREDITS-fml.txt" fullpath="CREDITS-fml.txt"/>
<zipfileset dir="${common.src.dir}" includes="mcpmod.info" />
<zipfileset dir="${client.src.dir}" includes="mcp.png" />
<zipfileset dir="${basedir}" includes="install/CREDITS-fml.txt" fullpath="CREDITS-fml.txt" />
<zipfileset dir="${common.src.dir}" includes="*.cfg" />
<mappedresources>
<concat>
@@ -205,25 +209,30 @@
</target>
<target name="build-deobf-data" depends="makeversion">
<mkdir dir="build-tmp-deobf"/>
<mkdir dir="build-tmp-deobf" />
<copy todir="build-tmp-deobf">
<mappedresources>
<fileset dir="${mcp.home}/conf" includes="packaged.srg"/>
<globmapper from="packaged.srg" to="joined.srg"/>
<fileset dir="${mcp.home}/conf" includes="packaged.srg" />
<globmapper from="packaged.srg" to="deobfuscation_data-${version.minecraft}" />
</mappedresources>
</copy>
<touch millis="0" file="build-tmp-deobf/joined.srg"/>
<zip file="deobfuscation_data_${version.minecraft}.zip" encoding="UTF-8">
<fileset dir="build-tmp-deobf" includes="joined.srg"/>
</zip>
<checksum algorithm="SHA1" property="deobf.checksum" file="deobfuscation_data_${version.minecraft}.zip"/>
<antcall target="writeversion"/>
<exec executable="lzma">
<arg line="build-tmp-deobf/deobfuscation_data-${version.minecraft}"/>
<arg line="-v"/>
</exec>
<copy todir="${basedir}">
<fileset dir="build-tmp-deobf" includes="*.lzma" />
</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="jenkinsbuild" depends="buildenvsetup,jenkinsfmldecompile,patch,build"/>
<target name="jenkinsbuild" depends="buildenvsetup,jenkinsfmldecompile,patch,build" />
<target name="patch" depends="buildenvsetup">
<exec executable="${python.exe}" dir="${basedir}">
@@ -242,87 +251,91 @@
</condition>
<fail if="do.not.continue">You have decided not to continue. This script will stop now.</fail>
<echo>Preparing the MCP environment at ${mcp.home}</echo>
<antcall target="fmldecompile"/>
<antcall target="fmldecompile" />
<echo>Moving old patched sources at ${patch.mcp.srcdir} out of the way</echo>
<move todir="${mcp.home}/src-work${timestamp}" failonerror="false" verbose="true">
<fileset dir="${patch.mcp.srcdir}"/>
<fileset dir="${patch.mcp.srcdir}" />
</move>
<echo>Deleting old patch references at ${clean.mcp.srcdir}</echo>
<delete dir="${clean.mcp.srcdir}" failonerror="false"/>
<delete dir="${clean.mcp.srcdir}" failonerror="false" />
<echo>Creating new patch references at ${clean.mcp.srcdir}</echo>
<copy todir="${clean.mcp.srcdir}">
<fileset dir="${mcp.srcdir}"/>
<fileset dir="${mcp.srcdir}" />
</copy>
<antcall target="cleanargo"/>
<antcall target="patch"/>
<antcall target="cleanargo" />
<antcall target="patch" />
<echo>Creating clean patched references at ${patch.mcp.srcdir}</echo>
<copy todir="${patch.mcp.srcdir}">
<fileset dir="${mcp.srcdir}"/>
<fileset dir="${mcp.srcdir}" />
</copy>
<antcall target="writeversion"/>
<antcall target="makeeclipse"/>
<antcall target="writeversion" />
<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>
<target name="fmldecompile" depends="buildenvsetup,makeclean">
<exec executable="${python.exe}" dir="${basedir}">
<arg value="${basedir}/decompile.py" />
<arg value="--mcp-dir" />
<arg value="${mcp.home}" />
<arg value="--fml-dir" />
<arg value="${basedir}" />
<arg value="--gen-conf" />
</exec>
</target>
<target name="jenkinsfmldecompile" depends="buildenvsetup,makeclean">
<exec executable="${python.exe}" dir="${basedir}">
<arg value="${basedir}/decompile.py" />
<arg value="--mcp-dir" />
<arg value="${mcp.home}" />
<arg value="--fml-dir" />
<arg value="${basedir}" />
<arg value="-no_gen_conf" />
</exec>
</target>
<target name="repatch" depends="buildenvsetup,checkpatches">
<echo>Moving old patched sources at ${mcp.home}/src-work out of the way</echo>
<move todir="${mcp.home}/src-work${timestamp}" failonerror="false" verbose="true">
<fileset dir="${patch.mcp.srcdir}"/>
<fileset dir="${patch.mcp.srcdir}" />
</move>
<delete dir="${mcp.srcdir}"/>
<delete dir="${mcp.srcdir}" />
<copy todir="${mcp.srcdir}">
<fileset dir="${clean.mcp.srcdir}"/>
<fileset dir="${clean.mcp.srcdir}" />
</copy>
<antcall target="cleanargo"/>
<antcall target="cleanargo" />
<antcall target="patch"/>
<antcall target="patch" />
<copy todir="${patch.mcp.srcdir}">
<fileset dir="${mcp.srcdir}"/>
<fileset dir="${mcp.srcdir}" />
</copy>
</target>
<target name="repatchclean" depends="buildenvsetup">
<delete dir="${mcp.srcdir}"/>
<delete dir="${mcp.srcdir}" />
<copy todir="${mcp.srcdir}">
<fileset dir="${clean.mcp.srcdir}"/>
<fileset dir="${clean.mcp.srcdir}" />
</copy>
<antcall target="cleanargo"/>
<antcall target="cleanargo" />
<antcall target="patch"/>
<antcall target="patch" />
</target>
<target name="cleanargo" depends="buildenvsetup">
<delete dir="${client.mcp.srcdir}/argo"/>
<delete dir="${client.mcp.srcdir}/org"/>
<delete dir="${client.mcp.srcdir}/argo" />
<delete dir="${client.mcp.srcdir}/org" />
</target>
<target name="checkpatches" depends="buildenvsetup">
<uptodate property="checkUptodate.uptodate">
<srcfiles dir="${patch.mcp.srcdir}" includes="**/*.java">
<present targetdir="${patch.src.dir}">
<globmapper from="*.java" to="*.java.patch"/>
<globmapper from="*.java" to="*.java.patch" />
</present>
</srcfiles>
<globmapper from="*.java" to="${patch.src.dir}/*.java.patch"/>
<globmapper from="*.java" to="${patch.src.dir}/*.java.patch" />
</uptodate>
<fail unless="checkUptodate.uptodate">
A patch is out of date. Update your patches!
@@ -332,8 +345,8 @@
<target name="updatepatches" depends="buildenvsetup">
<exec executable="${python.exe}" dir="${basedir}">
<arg value="${basedir}/update_patches.py" />
<arg value="${mcp.home}"/>
<arg value="${basedir}"/>
<arg value="${mcp.home}" />
<arg value="${basedir}" />
</exec>
</target>
@@ -341,30 +354,55 @@
<echo>
Extracting fresh eclipse workspace to ${basedir}/eclipse
</echo>
<unzip src="${basedir}/eclipse-workspace-dev.zip" dest="${basedir}"/>
<unzip src="${basedir}/eclipse-workspace-dev.zip" dest="${basedir}" />
</target>
<target name="makerenamedsource" depends="buildenvsetup,repatch,merge-client,merge-common,reobfuscate">
<copy todir="${tmp.mcp.srcdir}">
<fileset dir="${mcp.srcdir}"/>
<fileset dir="${mcp.srcdir}" />
</copy>
<exec executable="${python.exe}" dir="${mcp.home}">
<arg value="${mcp.home}/runtime/updatenames.py" />
<arg value="-f" />
</exec>
<copy todir="${renamed.mcp.srcdir}">
<fileset dir="${mcp.srcdir}"/>
<fileset dir="${mcp.srcdir}" />
</copy>
<move todir="${mcp.srcdir}">
<fileset dir="${tmp.mcp.srcdir}"/>
<fileset dir="${tmp.mcp.srcdir}" />
</move>
</target>
<target name="signjar" depends="buildenvsetup,makeversion" if="signature.exists">
<condition property="universal.jarname" value="${modname}-universal-${version.minecraft}-${version}" else="${modname}-universal-${version.minecraft}-${version}-${version.branch}">
<equals arg1="${version.branch}" arg2="master" />
</condition>
<property file="${env.JENKINS_HOME}/fmlsigned.properties" prefix="sign"/>
<echo>${env.JENKINS_HOME} ${universal.jarname} ${sign.KEYPASS}</echo>
<signjar alias="FML" jar="${basedir}/target/${universal.jarname}.zip" keypass="${sign.KEYPASS}" keystore="${env.JENKINS_HOME}/${sign.KEYSTORE}" storepass="${sign.STOREPASS}" verbose="true"/>
<property file="${env.JENKINS_HOME}/fmlsigned.properties" prefix="sign" />
<echo>${env.JENKINS_HOME} ${universal.jarname} ${sign.KEYPASS}</echo>
<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">
<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>
<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>
<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>
</target>
</project>
@@ -71,6 +71,7 @@ import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData;
import cpw.mods.fml.common.registry.IThrowableEntity;
import cpw.mods.fml.common.registry.ItemData;
import cpw.mods.fml.common.registry.LanguageRegistry;
import cpw.mods.fml.common.toposort.ModSortingException;
import cpw.mods.fml.relauncher.Side;
@@ -113,6 +114,8 @@ public class FMLClientHandler implements IFMLSidedHandler
private MissingModsException modsMissing;
private ModSortingException modSorting;
private boolean loading;
private WrongMinecraftVersionException wrongMC;
@@ -171,6 +174,10 @@ public class FMLClientHandler implements IFMLSidedHandler
{
modsMissing = missing;
}
catch (ModSortingException sorting)
{
modSorting = sorting;
}
catch (CustomModLoadingErrorDisplayException custom)
{
FMLLog.log(Level.SEVERE, custom, "A custom exception was thrown by a mod, the game will now halt");
@@ -197,7 +204,7 @@ public class FMLClientHandler implements IFMLSidedHandler
@SuppressWarnings("deprecation")
public void finishMinecraftLoading()
{
if (modsMissing != null || wrongMC != null || customError!=null || dupesFound!=null)
if (modsMissing != null || wrongMC != null || customError!=null || dupesFound!=null || modSorting!=null)
{
return;
}
@@ -237,14 +244,18 @@ public class FMLClientHandler implements IFMLSidedHandler
{
client.func_71373_a(new GuiDupesFound(dupesFound));
}
else if (customError != null)
else if (modSorting != null)
{
client.func_71373_a(new GuiSortingProblem(modSorting));
}
else if (customError != null)
{
client.func_71373_a(new GuiCustomModLoadingErrorScreen(customError));
}
else
{
// Force renderengine to reload and re-initialize all textures
client.field_71446_o.func_78352_b();
// client.field_71446_o.func_78352_b();
// TextureFXManager.instance().loadTextures(client.field_71418_C.func_77292_e());
}
}
@@ -528,4 +539,15 @@ public class FMLClientHandler implements IFMLSidedHandler
// Show error screen
warnIDMismatch(s, false);
}
/**
* Is this GUI type open?
*
* @param gui The type of GUI to test for
* @return if a GUI of this type is open
*/
public boolean isGUIOpen(Class<? extends GuiScreen> gui)
{
return client.field_71462_r != null && client.field_71462_r.getClass().equals(gui);
}
}
@@ -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
*/
@@ -17,6 +17,7 @@ import java.util.Map.Entry;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiYesNo;
import net.minecraft.client.resources.I18n;
import net.minecraft.util.StringTranslate;
import com.google.common.collect.Lists;
@@ -37,13 +38,13 @@ public class GuiIdMismatchScreen extends GuiYesNo {
field_73942_a = this;
for (Entry<Integer, ItemData> entry : idDifferences.entriesOnlyOnLeft().entrySet())
{
missingIds.add(String.format("ID %d (ModID: %s, type %s) is missing", entry.getValue().getItemId(), entry.getValue().getModId(), entry.getValue().getItemType()));
missingIds.add(String.format("ID %d from Mod %s is missing", entry.getValue().getItemId(), entry.getValue().getModId(), entry.getValue().getItemType()));
}
for (Entry<Integer, ValueDifference<ItemData>> entry : idDifferences.entriesDiffering().entrySet())
{
ItemData world = entry.getValue().leftValue();
ItemData game = entry.getValue().rightValue();
mismatchedIds.add(String.format("ID %d is mismatched. World: (ModID: %s, type %s, ordinal %d) Game (ModID: %s, type %s, ordinal %d)", world.getItemId(), world.getModId(), world.getItemType(), world.getOrdinal(), game.getModId(), game.getItemType(), game.getOrdinal()));
mismatchedIds.add(String.format("ID %d is mismatched between world and game", world.getItemId()));
}
this.allowContinue = allowContinue;
}
@@ -62,37 +63,44 @@ public class GuiIdMismatchScreen extends GuiYesNo {
{
field_73887_h.remove(0);
}
int offset = Math.max(85 - missingIds.size() * 10 + mismatchedIds.size() * 30, 10);
this.func_73732_a(this.field_73886_k, "Forge Mod Loader has found world ID mismatches", this.field_73880_f / 2, offset, 0xFFFFFF);
offset += 10;
int offset = Math.max(85 - (missingIds.size() + mismatchedIds.size()) * 10, 30);
this.func_73732_a(this.field_73886_k, "Forge Mod Loader has found ID mismatches", this.field_73880_f / 2, 10, 0xFFFFFF);
this.func_73732_a(this.field_73886_k, "Complete details are in the log file", this.field_73880_f / 2, 20, 0xFFFFFF);
int maxLines = 20;
for (String s: missingIds) {
this.func_73732_a(this.field_73886_k, s, this.field_73880_f / 2, offset, 0xEEEEEE);
offset += 10;
maxLines --;
if (maxLines < 0) break;
if (offset >= this.field_73881_g - 30) break;
}
for (String s: mismatchedIds) {
this.func_73732_a(this.field_73886_k, s, this.field_73880_f / 2, offset, 0xEEEEEE);
offset += 10;
if (maxLines > 0 && offset < this.field_73881_g - 30)
{
for (String s: mismatchedIds) {
this.func_73732_a(this.field_73886_k, s, this.field_73880_f / 2, offset, 0xEEEEEE);
offset += 10;
maxLines --;
if (maxLines < 0) break;
if (offset >= this.field_73881_g - 30) break;
}
}
offset += 10;
if (allowContinue)
{
this.func_73732_a(this.field_73886_k, "Do you wish to continue loading?", this.field_73880_f / 2, offset, 0xFFFFFF);
offset += 10;
this.func_73732_a(this.field_73886_k, "Do you wish to continue loading?", this.field_73880_f / 2, this.field_73881_g - 30, 0xFFFFFF);
}
else
{
this.func_73732_a(this.field_73886_k, "You cannot connect to this server", this.field_73880_f / 2, offset, 0xFFFFFF);
offset += 10;
this.func_73732_a(this.field_73886_k, "You cannot connect to this server", this.field_73880_f / 2, this.field_73881_g - 30, 0xFFFFFF);
}
// super.super. Grrr
for (int var4 = 0; var4 < this.field_73887_h.size(); ++var4)
{
GuiButton var5 = (GuiButton)this.field_73887_h.get(var4);
var5.field_73743_d = Math.min(offset + 10, this.field_73881_g - 20);
var5.field_73743_d = this.field_73881_g - 20;
if (!allowContinue)
{
var5.field_73746_c = this.field_73880_f / 2 - 75;
var5.field_73744_e = StringTranslate.func_74808_a().func_74805_b("gui.done");
var5.field_73744_e = I18n.func_135053_a("gui.done");
}
var5.func_73737_a(this.field_73882_e, p_73863_1_, p_73863_2_);
}
+4 -3
View File
@@ -23,6 +23,7 @@ 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.resources.I18n;
import net.minecraft.util.StringTranslate;
import org.lwjgl.opengl.GL11;
@@ -80,8 +81,7 @@ public class GuiModList extends GuiScreen
listWidth=Math.max(listWidth,getFontRenderer().func_78256_a(mod.getVersion()) + 10);
}
listWidth=Math.min(listWidth, 150);
StringTranslate translations = StringTranslate.func_74808_a();
this.field_73887_h.add(new GuiSmallButton(6, this.field_73880_f / 2 - 75, this.field_73881_g - 38, translations.func_74805_b("gui.done")));
this.field_73887_h.add(new GuiSmallButton(6, this.field_73880_f / 2 - 75, this.field_73881_g - 38, I18n.func_135053_a("gui.done")));
this.modList=new GuiSlotModList(this, mods, listWidth);
this.modList.registerScrollButtons(this.field_73887_h, 7, 8);
}
@@ -120,7 +120,8 @@ public class GuiModList extends GuiScreen
if (!logoFile.isEmpty())
{
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
this.field_73882_e.field_71446_o.func_98187_b(logoFile);
// 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;
+11 -1
View File
@@ -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,6 +15,7 @@ package cpw.mods.fml.client;
import net.minecraft.client.gui.GuiErrorScreen;
import cpw.mods.fml.common.MissingModsException;
import cpw.mods.fml.common.versioning.ArtifactVersion;
import cpw.mods.fml.common.versioning.DefaultArtifactVersion;
public class GuiModsMissing extends GuiErrorScreen
{
@@ -43,6 +44,15 @@ public class GuiModsMissing extends GuiErrorScreen
for (ArtifactVersion v : modsMissing.missingMods)
{
offset+=10;
if (v instanceof DefaultArtifactVersion)
{
DefaultArtifactVersion dav = (DefaultArtifactVersion)v;
if (dav.getRange() != null && dav.getRange().isUnboundedAbove())
{
this.func_73732_a(this.field_73886_k, String.format("%s : minimum version required is %s", v.getLabel(), dav.getRange().getLowerBoundString()), this.field_73880_f / 2, offset, 0xEEEEEE);
continue;
}
}
this.func_73732_a(this.field_73886_k, String.format("%s : %s", v.getLabel(), v.getRangeString()), this.field_73880_f / 2, offset, 0xEEEEEE);
}
offset+=20;
@@ -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,6 +15,7 @@ package cpw.mods.fml.client;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiSmallButton;
import net.minecraft.client.resources.I18n;
import net.minecraft.util.StringTranslate;
import cpw.mods.fml.common.network.ModMissingPacket;
import cpw.mods.fml.common.versioning.ArtifactVersion;
@@ -31,8 +32,7 @@ public class GuiModsMissingForServer extends GuiScreen
@Override
public void func_73866_w_()
{
StringTranslate translations = StringTranslate.func_74808_a();
this.field_73887_h.add(new GuiSmallButton(1, this.field_73880_f / 2 - 75, this.field_73881_g - 38, translations.func_74805_b("gui.done")));
this.field_73887_h.add(new GuiSmallButton(1, this.field_73880_f / 2 - 75, this.field_73881_g - 38, I18n.func_135053_a("gui.done")));
}
@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
*/
@@ -15,6 +15,7 @@ package cpw.mods.fml.client;
import java.util.List;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.renderer.Tessellator;
@@ -264,7 +265,7 @@ public abstract class GuiScrollingList
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_FOG);
Tessellator var18 = Tessellator.field_78398_a;
this.client.field_71446_o.func_98187_b("/gui/background.png");
this.client.field_71446_o.func_110577_a(Gui.field_110325_k);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
float var17 = 32.0F;
var18.func_78382_b();
@@ -397,7 +398,7 @@ public abstract class GuiScrollingList
private void overlayBackground(int p_22239_1_, int p_22239_2_, int p_22239_3_, int p_22239_4_)
{
Tessellator var5 = Tessellator.field_78398_a;
this.client.field_71446_o.func_98187_b("/gui/background.png");
this.client.field_71446_o.func_110577_a(Gui.field_110325_k);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
float var6 = 32.0F;
var5.func_78382_b();
@@ -0,0 +1,48 @@
package cpw.mods.fml.client;
import cpw.mods.fml.common.ModContainer;
import cpw.mods.fml.common.toposort.ModSortingException;
import cpw.mods.fml.common.toposort.ModSortingException.SortingExceptionData;
import cpw.mods.fml.common.versioning.ArtifactVersion;
import cpw.mods.fml.common.versioning.DefaultArtifactVersion;
import net.minecraft.client.gui.GuiScreen;
public class GuiSortingProblem extends GuiScreen {
private ModSortingException modSorting;
private SortingExceptionData<ModContainer> failedList;
public GuiSortingProblem(ModSortingException modSorting)
{
this.modSorting = modSorting;
this.failedList = modSorting.getExceptionData();
}
@Override
public void func_73866_w_()
{
super.func_73866_w_();
}
@Override
public void func_73863_a(int p_73863_1_, int p_73863_2_, float p_73863_3_)
{
this.func_73873_v_();
int offset = Math.max(85 - (failedList.getVisitedNodes().size() + 3) * 10, 10);
this.func_73732_a(this.field_73886_k, "Forge Mod Loader has found a problem with your minecraft installation", this.field_73880_f / 2, offset, 0xFFFFFF);
offset+=10;
this.func_73732_a(this.field_73886_k, "A mod sorting cycle was detected and loading cannot continue", this.field_73880_f / 2, offset, 0xFFFFFF);
offset+=10;
this.func_73732_a(this.field_73886_k, String.format("The first mod in the cycle is %s", failedList.getFirstBadNode()), this.field_73880_f / 2, offset, 0xFFFFFF);
offset+=10;
this.func_73732_a(this.field_73886_k, "The remainder of the cycle involves these mods", this.field_73880_f / 2, offset, 0xFFFFFF);
offset+=5;
for (ModContainer mc : failedList.getVisitedNodes())
{
offset+=10;
this.func_73732_a(this.field_73886_k, String.format("%s : before: %s, after: %s", mc.toString(), mc.getDependants(), mc.getDependencies()), this.field_73880_f / 2, offset, 0xEEEEEE);
}
offset+=20;
this.func_73732_a(this.field_73886_k, "The file 'ForgeModLoader-client-0.log' contains more information", this.field_73880_f / 2, offset, 0xFFFFFF);
}
}
@@ -1,29 +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.client;
import java.awt.Dimension;
import net.minecraft.client.renderer.RenderEngine;
import net.minecraft.client.texturepacks.ITexturePack;
public interface ITextureFX
{
public void onTexturePackChanged(RenderEngine engine, ITexturePack texturepack, Dimension dimensions);
public void onTextureDimensionsUpdate(int width, int height);
public void setErrored(boolean errored);
public boolean getErrored();
}
@@ -20,10 +20,14 @@ import java.util.Map;
import javax.imageio.ImageIO;
import org.lwjgl.opengl.ContextCapabilities;
import org.lwjgl.opengl.GLContext;
import com.google.common.collect.Maps;
import cpw.mods.fml.common.FMLLog;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderEngine;
public class TextureFXManager
{
@@ -34,24 +38,26 @@ public class TextureFXManager
private Map<Integer,TextureHolder> texturesById = Maps.newHashMap();
private Map<String, TextureHolder> texturesByName = Maps.newHashMap();
// private TextureHelper helper;
void setClient(Minecraft client)
{
this.client = client;
}
public BufferedImage loadImageFromTexturePack(RenderEngine renderEngine, String path) throws IOException
{
InputStream image=client.field_71418_C.func_77292_e().func_77532_a(path);
if (image==null) {
throw new RuntimeException(String.format("The requested image path %s is not found",path));
}
BufferedImage result=ImageIO.read(image);
if (result==null)
{
throw new RuntimeException(String.format("The requested image path %s appears to be corrupted",path));
}
return result;
}
// public BufferedImage loadImageFromTexturePack(RenderEngine renderEngine, String path) throws IOException
// {
// InputStream image=client.field_71418_C.func_77292_e().func_77532_a(path);
// if (image==null) {
// throw new RuntimeException(String.format("The requested image path %s is not found",path));
// }
// BufferedImage result=ImageIO.read(image);
// if (result==null)
// {
// throw new RuntimeException(String.format("The requested image path %s appears to be corrupted",path));
// }
// return result;
// }
//
public static TextureFXManager instance()
{
return INSTANCE;
@@ -102,4 +108,35 @@ public class TextureFXManager
{
return texturesByName.containsKey(texture) ? new Dimension(texturesByName.get(texture).x, texturesByName.get(texture).y) : new Dimension(1,1);
}
// public TextureHelper getHelper()
// {
// if (helper == null)
// {
// ContextCapabilities capabilities = GLContext.getCapabilities();
// boolean has43 = false;
// try
// {
// has43 = capabilities.getClass().getField("GL_ARB_copy_image").getBoolean(capabilities);
// }
// catch (Exception e)
// {
// //e.printStackTrace();
// // NOOP - LWJGL needs updating
// FMLLog.info("Forge Mod Loader has detected an older LWJGL version, new advanced texture animation features are disabled");
// }
//// if (has43 && Boolean.parseBoolean(System.getProperty("fml.useGL43","true")))
//// {
//// FMLLog.info("Using the new OpenGL 4.3 advanced capability for animations");
//// helper = new OpenGL43TextureHelper();
//// }
//// else
// {
// FMLLog.info("Not using advanced OpenGL 4.3 advanced capability for animations : OpenGL 4.3 is %s", has43 ? "available" : "not available");
//// helper = new CopySubimageTextureHelper();
// }
// }
// return helper;
// }
}
@@ -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
*/
@@ -48,9 +48,8 @@ public class RenderingRegistry
*/
public static int addNewArmourRendererPrefix(String armor)
{
RenderPlayer.field_77110_j = ObjectArrays.concat(RenderPlayer.field_77110_j, armor);
RenderBiped.field_82424_k = RenderPlayer.field_77110_j;
return RenderPlayer.field_77110_j.length - 1;
RenderBiped.field_82424_k = ObjectArrays.concat(RenderBiped.field_82424_k, armor);
return RenderBiped.field_82424_k.length - 1;
}
/**
@@ -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
*/
@@ -19,8 +19,6 @@ import java.util.logging.Logger;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.RenderEngine;
import net.minecraft.client.texturepacks.ITexturePack;
import net.minecraft.world.IBlockAccess;
import cpw.mods.fml.client.TextureFXManager;
@@ -70,4 +68,9 @@ public class FMLRenderAccessLibrary
{
return RenderingRegistry.instance().renderItemAsFull3DBlock(modelId);
}
// public static void doTextureCopy(Texture atlas, Texture source, int targetX, int targetY)
// {
// TextureFXManager.instance().getHelper().doTextureCopy(atlas, source, targetX, targetY);
// }
}
+11 -14
View File
@@ -26,7 +26,6 @@ import net.minecraft.client.*;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.multiplayer.NetClientHandler;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.RenderEngine;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.client.settings.KeyBinding;
@@ -541,7 +540,7 @@ public class ModLoader
@SideOnly(CLIENT)
public static boolean isGUIOpen(Class<? extends GuiScreen> gui)
{
return FMLClientHandler.instance().getClient().field_71462_r != null && FMLClientHandler.instance().getClient().field_71462_r.equals(gui);
return FMLClientHandler.instance().isGUIOpen(gui);
}
/**
@@ -564,11 +563,11 @@ public class ModLoader
{
}
@SideOnly(CLIENT)
public static BufferedImage loadImage(RenderEngine renderEngine, String path) throws Exception
{
return TextureFXManager.instance().loadImageFromTexturePack(renderEngine, path);
}
// @SideOnly(CLIENT)
// public static BufferedImage loadImage(RenderEngine renderEngine, String path) throws Exception
// {
// return TextureFXManager.instance().loadImageFromTexturePack(renderEngine, path);
// }
/**
* Call in from elsewhere. Unimplemented here.
@@ -616,11 +615,11 @@ public class ModLoader
return keys;
}
@Deprecated
@SideOnly(CLIENT)
public static void registerAllTextureOverrides(RenderEngine cache)
{
}
// @Deprecated
// @SideOnly(CLIENT)
// public static void registerAllTextureOverrides(RenderEngine cache)
// {
// }
/**
* Register a new block
@@ -810,14 +809,12 @@ public class ModLoader
@Deprecated
public static void serverChat(String text)
{
//TODO
}
@Deprecated
@SideOnly(CLIENT)
public static void serverLogin(NetClientHandler handler, Packet1Login loginPacket)
{
//TODO
}
public static void serverSendPacket(NetServerHandler handler, Packet packet)
+13 -95
View File
@@ -1,24 +1,15 @@
--- commands.py
+++ commands.py
@@ -58,6 +58,8 @@
def reallyrmtree(path):
+ if os.path.isfile(os.path.join(path, 'asm-4.1.tar.gz')): #Check if asm exists, indicating the libs folder, if so, don't delete it
+ return
if not sys.platform.startswith('win'):
if os.path.exists(path):
shutil.rmtree(path)
@@ -139,6 +141,8 @@
@@ -142,6 +142,8 @@
fieldnames = csvreader.fieldnames
return set(fieldnames)
+def commands_sanity_check():
+ print 'Commands patch applied successfully'
+ print ' Commands patch applied successfully'
class Commands(object):
"""Contains the commands and initialisation for a full mcp run"""
@@ -796,6 +800,8 @@
@@ -980,6 +982,8 @@
binlk = {CLIENT: self.binclient, SERVER: self.binserver}
testlk = {CLIENT: self.testclient, SERVER: self.testserver}
@@ -27,17 +18,17 @@
if not os.path.exists(os.path.join(binlk[side], os.path.normpath(testlk[side] + '.class'))):
return False
return True
@@ -1037,6 +1043,9 @@
@@ -1311,6 +1315,9 @@
pathbinlk = {CLIENT: self.binclient, SERVER: self.binserver}
pathsrclk = {CLIENT: self.srcclient, SERVER: self.srcserver}
pathlog = {CLIENT: self.clientrecomplog, SERVER: self.serverrecomplog}
+
+ if side == SERVER: #Warn about server because FML recombines it into client
+ self.logger.info('Server side recompiling might be skipped, this is normal, do not complain to FML/Forge team about server side.')
+
if not os.path.exists(pathbinlk[side]):
os.makedirs(pathbinlk[side])
@@ -1070,7 +1079,7 @@
@@ -1368,7 +1375,7 @@
raise
def startserver(self):
@@ -46,7 +37,7 @@
classpath = [os.path.join('..', p) for p in classpath]
classpath = os.pathsep.join(classpath)
os.chdir(self.dirjars)
@@ -1078,7 +1087,7 @@
@@ -1376,7 +1383,7 @@
self.runmc(forkcmd)
def startclient(self):
@@ -55,47 +46,7 @@
classpath = [os.path.join('..', p) for p in classpath]
classpath = os.pathsep.join(classpath)
natives = os.path.join('..', self.dirnatives)
@@ -1205,20 +1214,20 @@
with open(self.csvmethods, 'rb') as fh:
methodsreader = csv.DictReader(fh)
for row in methodsreader:
- if int(row['side']) == side:
+ if int(row['side']) == side or int(row['side']) == 2:
if row['name'] != row['searge']:
names['methods'][row['searge']] = row['name']
with open(self.csvfields, 'rb') as fh:
fieldsreader = csv.DictReader(fh)
for row in fieldsreader:
- if int(row['side']) == side:
+ if int(row['side']) == side or int(row['side']) == 2:
if row['name'] != row['searge']:
names['fields'][row['searge']] = row['name']
if self.has_param_csv:
with open(self.csvparams, 'rb') as fh:
paramsreader = csv.DictReader(fh)
for row in paramsreader:
- if int(row['side']) == side:
+ if int(row['side']) == side or int(row['side']) == 2:
names['params'][row['param']] = row['name']
regexps = {
@@ -1352,13 +1361,13 @@
methods = {}
for row in methodsreader:
#HINT: Only include methods that have a non-empty description
- if int(row['side']) == side and row['desc']:
+ if (int(row['side']) == side or int(row['side']) == 2) and row['desc']:
methods[row['searge']] = row['desc'].replace('*/', '* /')
fields = {}
for row in fieldsreader:
#HINT: Only include fields that have a non-empty description
- if int(row['side']) == side and row['desc']:
+ if (int(row['side']) == side or int(row['side']) == 2) and row['desc']:
fields[row['searge']] = row['desc'].replace('*/', '* /')
regexps = {
@@ -1435,7 +1444,7 @@
@@ -1733,7 +1740,7 @@
self.runcmd(forkcmd)
return True
@@ -104,7 +55,7 @@
if not reobf:
md5lk = {CLIENT: self.md5client, SERVER: self.md5server}
else:
@@ -1450,6 +1459,9 @@
@@ -1748,6 +1755,9 @@
class_path = ''
else:
class_path += '/'
@@ -114,40 +65,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))
@@ -1546,6 +1558,8 @@
if not os.path.exists(outpathlk[side]):
os.makedirs(outpathlk[side])
+ reserved = ['CON', 'PRN', 'AUX', 'NUL', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9']
+
# HINT: We extract the modified class files
with closing(zipfile.ZipFile(jarlk[side])) as zipjar:
for in_class in trgclasses:
@@ -1559,6 +1573,23 @@
out_class = out_class.replace(self.nullpkg, '')
if out_class[0] == '/':
out_class = out_class[1:]
+
+ rename = False
+ for res in reserved:
+ if out_class.upper().startswith(res):
+ rename = True
+ break
+
+ if rename:
+ try:
+ f = open(os.path.join(outpathlk[side], '_' + out_class), 'wb')
+ f.write(zipjar.read(out_class))
+ f.close()
+ self.logger.info('> Outputted %s to %s as %s', in_class.ljust(35), outpathlk[side], '_' + out_class)
+ except IOError:
+ self.logger.error('* File %s failed extracting for %s', out_class, in_class)
+ continue
+
try:
zipjar.extract(out_class, outpathlk[side])
self.logger.info('> Outputted %s to %s as %s', in_class.ljust(35), outpathlk[side], out_class)
@@ -1605,6 +1636,9 @@
@@ -1920,6 +1930,9 @@
sys.exit(1)
for entry in newfiles:
@@ -157,7 +75,7 @@
if entry[3] == 'U':
self.logger.info('Retrieving file from server : %s', entry[0])
cur_file = os.path.normpath(entry[0])
@@ -1625,6 +1659,9 @@
@@ -1940,6 +1953,9 @@
md5reoblk = {CLIENT: self.md5reobfclient, SERVER: self.md5reobfserver}
outpathlk = {CLIENT: self.srcmodclient, SERVER: self.srcmodserver}
src = {CLIENT: self.srcclient, SERVER: self.srcserver}
@@ -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
*/
@@ -16,6 +16,7 @@ import java.io.File;
import java.security.cert.Certificate;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.google.common.eventbus.EventBus;
@@ -28,12 +29,17 @@ public class DummyModContainer implements ModContainer
{
private ModMetadata md;
private ArtifactVersion processedVersion;
private String label;
public DummyModContainer(ModMetadata md)
{
this.md = md;
}
public DummyModContainer(String label)
{
this.label = label;
}
public DummyModContainer()
{
}
@@ -157,4 +163,16 @@ public class DummyModContainer implements ModContainer
{
return null;
}
@Override
public String toString()
{
return md != null ? getModId() : "Dummy Container ("+label+") @" + System.identityHashCode(this);
}
@Override
public Map<String, String> getCustomModProperties()
{
return EMPTY_PROPERTIES;
}
}
@@ -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
*/
@@ -38,6 +38,7 @@ import net.minecraft.world.World;
import net.minecraft.world.storage.SaveHandler;
import net.minecraft.world.storage.WorldInfo;
import com.google.common.base.Joiner;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableList;
@@ -244,12 +245,9 @@ public class FMLCommonHandler
{
brd.addAll(sidedDelegate.getAdditionalBrandingInformation());
}
try {
Properties props=new Properties();
props.load(getClass().getClassLoader().getResourceAsStream("fmlbranding.properties"));
brd.add(props.getProperty("fmlbranding"));
} catch (Exception ex) {
// Ignore - no branding file found
if (Loader.instance().getFMLBrandingProperties().containsKey("fmlbranding"))
{
brd.add(Loader.instance().getFMLBrandingProperties().get("fmlbranding"));
}
int tModCount = Loader.instance().getModList().size();
int aModCount = Loader.instance().getActiveModList().size();
@@ -467,6 +465,25 @@ public class FMLCommonHandler
public void handleServerStopped()
{
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");
}
public String getModName()
{
List<String> modNames = Lists.newArrayListWithExpectedSize(3);
modNames.add("fml");
if (!noForge)
{
modNames.add("forge");
}
if (Loader.instance().getFMLBrandingProperties().containsKey("snooperbranding"))
{
modNames.add(Loader.instance().getFMLBrandingProperties().get("snooperbranding"));
}
return Joiner.on(',').join(modNames);
}
}
+72 -37
View File
@@ -38,8 +38,10 @@ import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterators;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.SetMultimap;
@@ -47,6 +49,7 @@ import com.google.common.collect.Sets;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import cpw.mods.fml.common.Mod.CustomProperty;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.Mod.Metadata;
import cpw.mods.fml.common.discovery.ASMDataTable;
@@ -83,7 +86,6 @@ public class FMLModContainer implements ModContainer
private boolean overridesMetadata;
private EventBus eventBus;
private LoadController controller;
private Multimap<Class<? extends Annotation>, Object> annotations;
private DefaultArtifactVersion processedVersion;
private boolean isNetworkMod;
@@ -107,35 +109,17 @@ public class FMLModContainer implements ModContainer
private Certificate certificate;
private String modLanguage;
private ILanguageAdapter languageAdapter;
private ListMultimap<Class<? extends FMLEvent>,Method> eventMethods;
private Map<String, String> customModProperties;
public static interface ILanguageAdapter {
public Object getNewInstance(FMLModContainer container, Class<?> objectClass, ClassLoader classLoader) throws Exception;
}
public static class ScalaAdapter implements ILanguageAdapter {
@Override
public Object getNewInstance(FMLModContainer container, Class<?> scalaObjectClass, ClassLoader classLoader) throws Exception
{
System.out.println("Scala class : "+ scalaObjectClass);
Class<?> sObjectClass = Class.forName(scalaObjectClass.getName()+"$",true,classLoader);
return sObjectClass.getField("MODULE$").get(null);
}
}
public static class JavaAdapter implements ILanguageAdapter {
@Override
public Object getNewInstance(FMLModContainer container, Class<?> objectClass, ClassLoader classLoader) throws Exception
{
return objectClass.newInstance();
}
}
public FMLModContainer(String className, File modSource, Map<String,Object> modDescriptor)
{
this.className = className;
this.source = modSource;
this.descriptor = modDescriptor;
this.modLanguage = (String) modDescriptor.get("modLanguage");
this.languageAdapter = "scala".equals(modLanguage) ? new ScalaAdapter() : new JavaAdapter();
this.languageAdapter = "scala".equals(modLanguage) ? new ILanguageAdapter.ScalaAdapter() : new ILanguageAdapter.JavaAdapter();
this.eventMethods = ArrayListMultimap.create();
}
private ILanguageAdapter getLanguageAdapter()
@@ -333,10 +317,9 @@ public class FMLModContainer implements ModContainer
}
}
private Multimap<Class<? extends Annotation>, Object> gatherAnnotations(Class<?> clazz) throws Exception
private Method gatherAnnotations(Class<?> clazz) throws Exception
{
Multimap<Class<? extends Annotation>,Object> anns = ArrayListMultimap.create();
Method factoryMethod = null;
for (Method m : clazz.getDeclaredMethods())
{
for (Annotation a : m.getAnnotations())
@@ -344,20 +327,47 @@ public class FMLModContainer implements ModContainer
if (modTypeAnnotations.containsKey(a.annotationType()))
{
Class<?>[] paramTypes = new Class[] { modTypeAnnotations.get(a.annotationType()) };
if (Arrays.equals(m.getParameterTypes(), paramTypes))
{
m.setAccessible(true);
anns.put(a.annotationType(), m);
eventMethods.put(modTypeAnnotations.get(a.annotationType()), m);
}
else
{
FMLLog.log(getModId(), Level.SEVERE,"The mod %s appears to have an invalid method annotation %s. This annotation can only apply to methods with argument types %s -it will not be called", getModId(), a.annotationType().getSimpleName(), Arrays.toString(paramTypes));
}
}
else if (a.annotationType().equals(Mod.EventHandler.class))
{
if (m.getParameterTypes().length == 1 && modAnnotationTypes.containsKey(m.getParameterTypes()[0]))
{
m.setAccessible(true);
eventMethods.put((Class<? extends FMLEvent>) m.getParameterTypes()[1],m);
}
else
{
FMLLog.log(getModId(), Level.SEVERE,"The mod %s appears to have an invalid event annotation %s. This annotation can only apply to methods with recognized event arguments - it will not be called", getModId(), a.annotationType().getSimpleName());
}
}
else if (a.annotationType().equals(Mod.InstanceFactory.class))
{
if (Modifier.isStatic(m.getModifiers()) && m.getParameterTypes().length == 0 && factoryMethod == null)
{
m.setAccessible(true);
factoryMethod = m;
}
else if (!(Modifier.isStatic(m.getModifiers()) && m.getParameterTypes().length == 0))
{
FMLLog.log(getModId(), Level.SEVERE, "The InstanceFactory annotation can only apply to a static method, taking zero arguments - it will be ignored on %s(%s)", m.getName(), Arrays.asList(m.getParameterTypes()));
}
else if (factoryMethod != null)
{
FMLLog.log(getModId(), Level.SEVERE, "The InstanceFactory annotation can only be used once, the application to %s(%s) will be ignored", m.getName(), Arrays.asList(m.getParameterTypes()));
}
}
}
}
return anns;
return factoryMethod;
}
private void processFieldAnnotations(ASMDataTable asmDataTable) throws Exception
@@ -482,14 +492,30 @@ public class FMLModContainer implements ModContainer
}
}
annotations = gatherAnnotations(clazz);
CustomProperty[] props = (CustomProperty[]) descriptor.get("customProperties");
if (props!=null && props.length > 0)
{
com.google.common.collect.ImmutableMap.Builder<String, String> builder = ImmutableMap.<String,String>builder();
for (CustomProperty p : props)
{
builder.put(p.k(),p.v());
}
customModProperties = builder.build();
}
else
{
customModProperties = EMPTY_PROPERTIES;
}
Method factoryMethod = gatherAnnotations(clazz);
isNetworkMod = FMLNetworkHandler.instance().registerNetworkMod(this, clazz, event.getASMHarvestedData());
modInstance = getLanguageAdapter().getNewInstance(this,clazz, modClassLoader);
modInstance = getLanguageAdapter().getNewInstance(this,clazz, modClassLoader, factoryMethod);
if (fingerprintNotPresent)
{
eventBus.post(new FMLFingerprintViolationEvent(source.isDirectory(), source, ImmutableSet.copyOf(this.sourceFingerprints), expectedFingerprint));
}
ProxyInjector.inject(this, event.getASMHarvestedData(), FMLCommonHandler.instance().getSide());
ProxyInjector.inject(this, event.getASMHarvestedData(), FMLCommonHandler.instance().getSide(), getLanguageAdapter());
processFieldAnnotations(event.getASMHarvestedData());
}
catch (Throwable e)
@@ -502,23 +528,20 @@ public class FMLModContainer implements ModContainer
@Subscribe
public void handleModStateEvent(FMLEvent event)
{
Class<? extends Annotation> annotation = modAnnotationTypes.get(event.getClass());
if (annotation == null)
if (!eventMethods.containsKey(event.getClass()))
{
return;
}
try
{
for (Object o : annotations.get(annotation))
for (Method m : eventMethods.get(event.getClass()))
{
Method m = (Method) o;
m.invoke(modInstance, event);
}
}
catch (Throwable t)
{
controller.errorOccurred(this, t);
Throwables.propagateIfPossible(t);
}
}
@@ -560,4 +583,16 @@ public class FMLModContainer implements ModContainer
{
return certificate;
}
@Override
public String toString()
{
return "FMLMod:"+getModId()+"{"+getVersion()+"}";
}
@Override
public Map<String, String> getCustomModProperties()
{
return customModProperties;
}
}
@@ -0,0 +1,197 @@
package cpw.mods.fml.common;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.relauncher.Side;
public interface ILanguageAdapter {
public Object getNewInstance(FMLModContainer container, Class<?> objectClass, ClassLoader classLoader, Method factoryMarkedAnnotation) throws Exception;
public boolean supportsStatics();
public void setProxy(Field target, Class<?> proxyTarget, Object proxy) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException;
public void setInternalProxies(ModContainer mod, Side side, ClassLoader loader);
public static class ScalaAdapter implements ILanguageAdapter {
@Override
public Object getNewInstance(FMLModContainer container, Class<?> scalaObjectClass, ClassLoader classLoader, Method factoryMarkedAnnotation) throws Exception
{
Class<?> sObjectClass = Class.forName(scalaObjectClass.getName()+"$",true,classLoader);
return sObjectClass.getField("MODULE$").get(null);
}
@Override
public boolean supportsStatics()
{
return false;
}
@Override
public void setProxy(Field target, Class<?> proxyTarget, Object proxy) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException
{
try
{
// Get the actual singleton class. The two variants are from
// whether the @SidedProxy is declared in a the class block
// of the object directly, or in the object block, i.e.
// whether it's:
// class ModName {
// @SidedProxy ...
// }
// object ModName extends ModName {}
// which leads to us getting the outer class, or
// object ModName {
// @SidedProxy ...
// }
// which leads to us getting the inner class.
if (!proxyTarget.getName().endsWith("$"))
{
// Get internal class generated by Scala.
proxyTarget = Class.forName(proxyTarget.getName() + "$", true, proxyTarget.getClassLoader());
}
}
catch (ClassNotFoundException e)
{
// Not a singleton, look for @Instance field as a fallback.
FMLLog.log(Level.INFO, e, "An error occured trying to load a proxy into %s.%s. Did you declare your mod as 'class' instead of 'object'?", proxyTarget.getSimpleName(), target.getName());
return;
}
// Get the instance via the MODULE$ field which is
// automatically generated by the Scala compiler for
// singletons.
Object targetInstance = proxyTarget.getField("MODULE$").get(null);
try
{
// Find setter function. We do it this way because we can't
// necessarily use proxyTarget.getMethod(proxy.getClass()), as
// it might be a subclass and not the exact parameter type.
// All fields are private in Scala, wrapped by a getter and
// setter named <fieldname> and <fieldname>_$eq. To those
// familiar with scala.reflect.BeanProperty: these will always
// be there, set<Fieldname> and get<Fieldname> will always
// only be generated *additionally*.
final String setterName = target.getName() + "_$eq";
for (Method setter : proxyTarget.getMethods())
{
Class<?>[] setterParameters = setter.getParameterTypes();
if (setterName.equals(setter.getName()) &&
// Some more validation.
setterParameters.length == 1 &&
setterParameters[0].isAssignableFrom(proxy.getClass()))
{
// Here goes nothing...
setter.invoke(targetInstance, proxy);
return;
}
}
}
catch (InvocationTargetException e)
{
FMLLog.log(Level.SEVERE, e, "An error occured trying to load a proxy into %s.%s", proxyTarget.getSimpleName(), target.getName());
throw new LoaderException(e);
}
// If we come here we could not find a setter for this proxy.
FMLLog.severe("Failed loading proxy into %s.%s, could not find setter function. Did you declare the field with 'val' instead of 'var'?", proxyTarget.getSimpleName(), target.getName());
throw new LoaderException();
}
@Override
public void setInternalProxies(ModContainer mod, Side side, ClassLoader loader)
{
// For Scala mods, we want to enable authors to write them like so:
// object ModName {
// @SidedProxy(...)
// var proxy: ModProxy = null
// }
// For this to work, we have to search inside the inner class Scala
// generates for singletons, which is in called ModName$. These are
// not automatically handled, because the mod discovery code ignores
// internal classes.
// Note that it is alternatively possible to write this like so:
// class ModName {
// @SidedProxy(...)
// var proxy: ModProxy = null
// }
// object ModName extends ModName { ... }
// which will fall back to the normal injection code which calls
// setProxy in turn.
// Get the actual mod implementation, which will be the inner class
// if we have a singleton.
Class<?> proxyTarget = mod.getMod().getClass();
if (proxyTarget.getName().endsWith("$"))
{
// So we have a singleton class, check if there are targets.
for (Field target : proxyTarget.getDeclaredFields())
{
// This will not turn up anything if the alternative
// approach was taken (manually declaring the class).
// So we don't initialize the field twice.
if (target.getAnnotation(SidedProxy.class) != null)
{
String targetType = side.isClient() ? target.getAnnotation(SidedProxy.class).clientSide() : target.getAnnotation(SidedProxy.class).serverSide();
try
{
Object proxy = Class.forName(targetType, true, loader).newInstance();
if (!target.getType().isAssignableFrom(proxy.getClass()))
{
FMLLog.severe("Attempted to load a proxy type %s into %s.%s, but the types don't match", targetType, proxyTarget.getSimpleName(), target.getName());
throw new LoaderException();
}
setProxy(target, proxyTarget, proxy);
}
catch (Exception e) {
FMLLog.log(Level.SEVERE, e, "An error occured trying to load a proxy into %s.%s", proxyTarget.getSimpleName(), target.getName());
throw new LoaderException(e);
}
}
}
}
else
{
FMLLog.finer("Mod does not appear to be a singleton.");
}
}
}
public static class JavaAdapter implements ILanguageAdapter {
@Override
public Object getNewInstance(FMLModContainer container, Class<?> objectClass, ClassLoader classLoader, Method factoryMarkedMethod) throws Exception
{
if (factoryMarkedMethod != null)
{
return factoryMarkedMethod.invoke(null);
}
else
{
return objectClass.newInstance();
}
}
@Override
public boolean supportsStatics()
{
return true;
}
@Override
public void setProxy(Field target, Class<?> proxyTarget, Object proxy) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException,
SecurityException
{
target.set(null, proxy);
}
@Override
public void setInternalProxies(ModContainer mod, Side side, ClassLoader loader)
{
// Nothing to do here.
}
}
}
@@ -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,6 +15,7 @@ package cpw.mods.fml.common;
import java.io.File;
import java.security.cert.Certificate;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.google.common.eventbus.EventBus;
@@ -25,7 +26,7 @@ import cpw.mods.fml.common.versioning.VersionRange;
public class InjectedModContainer implements ModContainer
{
private File source;
private ModContainer wrappedContainer;
public final ModContainer wrappedContainer;
public InjectedModContainer(ModContainer mc, File source)
{
@@ -148,4 +149,16 @@ public class InjectedModContainer implements ModContainer
{
return wrappedContainer.getSigningCertificate();
}
@Override
public String toString()
{
return "Wrapped{"+wrappedContainer.toString()+"}";
}
@Override
public Map<String, String> getCustomModProperties()
{
return wrappedContainer.getCustomModProperties();
}
}
+45 -19
View File
@@ -13,15 +13,18 @@
package cpw.mods.fml.common;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.google.common.base.Functions;
import com.google.common.base.Joiner;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.BiMap;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
@@ -36,6 +39,8 @@ import cpw.mods.fml.common.event.FMLEvent;
import cpw.mods.fml.common.event.FMLLoadEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLStateEvent;
import cpw.mods.fml.common.functions.ArtifactVersionNameFunction;
import cpw.mods.fml.common.versioning.ArtifactVersion;
public class LoadController
{
@@ -99,11 +104,11 @@ public class LoadController
}
}
public void transition(LoaderState desiredState)
public void transition(LoaderState desiredState, boolean forceState)
{
LoaderState oldState = state;
state = state.transition(!errors.isEmpty());
if (state != desiredState)
if (state != desiredState && !forceState)
{
Throwable toThrow = null;
FMLLog.severe("Fatal errors were detected during the transition from %s to %s. Loading cannot continue", oldState, desiredState);
@@ -142,6 +147,12 @@ public class LoadController
throw new LoaderException(toThrow);
}
}
else if (state != desiredState && forceState)
{
FMLLog.info("The state engine was in incorrect state %s and forced into state %s. Errors may have been discarded.", state, desiredState);
forceState(desiredState);
}
}
public ModContainer activeContainer()
@@ -158,23 +169,38 @@ public class LoadController
}
for (ModContainer mc : activeModList)
{
activeContainer = mc;
String modId = mc.getModId();
stateEvent.applyModContainer(activeContainer());
FMLLog.log(modId, Level.FINEST, "Sending event %s to mod %s", stateEvent.getEventType(), modId);
eventChannels.get(modId).post(stateEvent);
FMLLog.log(modId, Level.FINEST, "Sent event %s to mod %s", stateEvent.getEventType(), modId);
activeContainer = null;
if (stateEvent instanceof FMLStateEvent)
sendEventToModContainer(stateEvent, mc);
}
}
private void sendEventToModContainer(FMLEvent stateEvent, ModContainer mc)
{
String modId = mc.getModId();
Collection<String> requirements = Collections2.transform(mc.getRequirements(),new ArtifactVersionNameFunction());
for (ArtifactVersion av : mc.getDependencies())
{
if (av.getLabel()!= null && requirements.contains(av.getLabel()) && modStates.containsEntry(av.getLabel(),ModState.ERRORED))
{
if (!errors.containsKey(modId))
{
modStates.put(modId, ((FMLStateEvent)stateEvent).getModState());
}
else
{
modStates.put(modId, ModState.ERRORED);
}
FMLLog.log(modId, Level.SEVERE, "Skipping event %s and marking errored mod %s since required dependency %s has errored", stateEvent.getEventType(), modId, av.getLabel());
modStates.put(modId, ModState.ERRORED);
return;
}
}
activeContainer = mc;
stateEvent.applyModContainer(activeContainer());
FMLLog.log(modId, Level.FINEST, "Sending event %s to mod %s", stateEvent.getEventType(), modId);
eventChannels.get(modId).post(stateEvent);
FMLLog.log(modId, Level.FINEST, "Sent event %s to mod %s", stateEvent.getEventType(), modId);
activeContainer = null;
if (stateEvent instanceof FMLStateEvent)
{
if (!errors.containsKey(modId))
{
modStates.put(modId, ((FMLStateEvent)stateEvent).getModState());
}
else
{
modStates.put(modId, ModState.ERRORED);
}
}
}
@@ -216,7 +242,7 @@ public class LoadController
{
for (ModContainer mc : loader.getModList())
{
ret.append("\n\t").append(mc.getModId()).append(" [").append(mc.getName()).append("] (").append(mc.getSource().getName()).append(") ");
ret.append("\n\t").append(mc.getModId()).append("{").append(mc.getVersion()).append("} [").append(mc.getName()).append("] (").append(mc.getSource().getName()).append(") ");
Joiner.on("->"). appendTo(ret, modStates.get(mc.getModId()));
}
}
+58 -30
View File
@@ -13,6 +13,7 @@
package cpw.mods.fml.common;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.net.MalformedURLException;
@@ -26,15 +27,20 @@ import java.util.concurrent.Callable;
import java.util.logging.Level;
import net.minecraft.crash.CallableMinecraftVersion;
import net.minecraft.item.ItemStack;
import com.google.common.base.CharMatcher;
import com.google.common.base.Charsets;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Joiner.MapJoiner;
import com.google.common.base.Splitter;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ImmutableListMultimap.Builder;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultiset;
import com.google.common.collect.Iterables;
@@ -47,17 +53,21 @@ import com.google.common.collect.Multiset.Entry;
import com.google.common.collect.Multisets;
import com.google.common.collect.Ordering;
import com.google.common.collect.Sets.SetView;
import com.google.common.collect.Table;
import com.google.common.collect.TreeMultimap;
import com.google.common.io.Files;
import cpw.mods.fml.common.LoaderState.ModState;
import cpw.mods.fml.common.discovery.ModDiscoverer;
import cpw.mods.fml.common.event.FMLInterModComms;
import cpw.mods.fml.common.event.FMLLoadEvent;
import cpw.mods.fml.common.functions.ArtifactVersionNameFunction;
import cpw.mods.fml.common.functions.ModIdFunction;
import cpw.mods.fml.common.modloader.BaseModProxy;
import cpw.mods.fml.common.registry.GameData;
import cpw.mods.fml.common.toposort.ModSorter;
import cpw.mods.fml.common.toposort.ModSortingException;
import cpw.mods.fml.common.toposort.ModSortingException.SortingExceptionData;
import cpw.mods.fml.common.toposort.TopologicalSort;
import cpw.mods.fml.common.versioning.ArtifactVersion;
import cpw.mods.fml.common.versioning.VersionParser;
@@ -144,6 +154,7 @@ public class Loader
private static File minecraftDir;
private static List<String> injectedContainers;
private File loggingProperties;
private ImmutableMap<String, String> fmlBrandingProperties;
public static Loader instance()
{
@@ -204,13 +215,7 @@ public class Loader
FMLLog.severe("The mod %s does not wish to run in Minecraft version %s. You will have to remove it to play.", mod.getModId(), getMCVersionString());
throw new WrongMinecraftVersionException(mod);
}
Map<String,ArtifactVersion> names = Maps.uniqueIndex(mod.getRequirements(), new Function<ArtifactVersion, String>()
{
public String apply(ArtifactVersion v)
{
return v.getLabel();
}
});
Map<String,ArtifactVersion> names = Maps.uniqueIndex(mod.getRequirements(), new ArtifactVersionNameFunction());
Set<ArtifactVersion> versionMissingMods = Sets.newHashSet();
Set<String> missingMods = Sets.difference(names.keySet(), modVersions.keySet());
if (!missingMods.isEmpty())
@@ -260,10 +265,15 @@ public class Loader
catch (ModSortingException sortException)
{
FMLLog.severe("A dependency cycle was detected in the input mod set so an ordering cannot be determined");
FMLLog.severe("The visited mod list is %s", sortException.getExceptionData().getVisitedNodes());
FMLLog.severe("The first mod in the cycle is %s", sortException.getExceptionData().getFirstBadNode());
SortingExceptionData<ModContainer> exceptionData = sortException.getExceptionData();
FMLLog.severe("The first mod in the cycle is %s", exceptionData.getFirstBadNode());
FMLLog.severe("The mod cycle involves");
for (ModContainer mc : exceptionData.getVisitedNodes())
{
FMLLog.severe("%s : before: %s, after: %s", mc.toString(), mc.getDependants(), mc.getDependencies());
}
FMLLog.log(Level.SEVERE, sortException, "The full error");
throw new LoaderException(sortException);
throw sortException;
}
}
finally
@@ -466,7 +476,7 @@ public class Loader
mods = Lists.newArrayList();
namedMods = Maps.newHashMap();
modController = new LoadController(this);
modController.transition(LoaderState.LOADING);
modController.transition(LoaderState.LOADING, false);
ModDiscoverer disc = identifyMods();
disableRequestedMods();
FMLLog.fine("Reloading logging properties from %s", loggingProperties.getPath());
@@ -490,7 +500,7 @@ public class Loader
}
}
}
modController.transition(LoaderState.CONSTRUCTING);
modController.transition(LoaderState.CONSTRUCTING, false);
modController.distributeStateMessage(LoaderState.CONSTRUCTING, modClassLoader, disc.getASMTable());
FMLLog.fine("Mod signature data");
for (ModContainer mod : getActiveModList())
@@ -501,9 +511,9 @@ public class Loader
{
FMLLog.fine("No user mod signature data found");
}
modController.transition(LoaderState.PREINITIALIZATION);
modController.transition(LoaderState.PREINITIALIZATION, false);
modController.distributeStateMessage(LoaderState.PREINITIALIZATION, disc.getASMTable(), canonicalConfigDir);
modController.transition(LoaderState.INITIALIZATION);
modController.transition(LoaderState.INITIALIZATION, false);
}
private void disableRequestedMods()
@@ -679,13 +689,15 @@ public class Loader
{
// Mod controller should be in the initialization state here
modController.distributeStateMessage(LoaderState.INITIALIZATION);
modController.transition(LoaderState.POSTINITIALIZATION);
modController.transition(LoaderState.POSTINITIALIZATION, false);
// Construct the "mod object table" so mods can refer to it in IMC and postinit
GameData.buildModObjectTable();
modController.distributeStateMessage(FMLInterModComms.IMCEvent.class);
modController.distributeStateMessage(LoaderState.POSTINITIALIZATION);
modController.transition(LoaderState.AVAILABLE);
modController.transition(LoaderState.AVAILABLE, false);
modController.distributeStateMessage(LoaderState.AVAILABLE);
// Dump the custom registry data map, if necessary
GameData.dumpRegistry(minecraftDir);
FMLLog.info("Forge Mod Loader has successfully loaded %d mod%s", mods.size(), mods.size()==1 ? "" : "s");
}
@@ -726,7 +738,7 @@ public class Loader
try
{
modController.distributeStateMessage(LoaderState.SERVER_STARTING, server);
modController.transition(LoaderState.SERVER_STARTING);
modController.transition(LoaderState.SERVER_STARTING, false);
}
catch (Throwable t)
{
@@ -739,13 +751,13 @@ public class Loader
public void serverStarted()
{
modController.distributeStateMessage(LoaderState.SERVER_STARTED);
modController.transition(LoaderState.SERVER_STARTED);
modController.transition(LoaderState.SERVER_STARTED, false);
}
public void serverStopping()
{
modController.distributeStateMessage(LoaderState.SERVER_STOPPING);
modController.transition(LoaderState.SERVER_STOPPING);
modController.transition(LoaderState.SERVER_STOPPING, false);
}
public BiMap<ModContainer, Object> getModObjectList()
@@ -784,16 +796,8 @@ public class Loader
public void serverStopped()
{
modController.distributeStateMessage(LoaderState.SERVER_STOPPED);
try
{
modController.transition(LoaderState.SERVER_STOPPED);
}
catch (LoaderException e)
{
modController.forceState(LoaderState.SERVER_STOPPED);
// Discard any exceptions here - they mask other, real, exceptions
}
modController.transition(LoaderState.AVAILABLE);
modController.transition(LoaderState.SERVER_STOPPED, true);
modController.transition(LoaderState.AVAILABLE, true);
}
public boolean serverAboutToStart(Object server)
@@ -801,7 +805,7 @@ public class Loader
try
{
modController.distributeStateMessage(LoaderState.SERVER_ABOUT_TO_START, server);
modController.transition(LoaderState.SERVER_ABOUT_TO_START);
modController.transition(LoaderState.SERVER_ABOUT_TO_START, false);
}
catch (Throwable t)
{
@@ -810,4 +814,28 @@ public class Loader
}
return true;
}
public Map<String,String> getFMLBrandingProperties()
{
if (fmlBrandingProperties == null)
{
Properties loaded = new Properties();
try
{
loaded.load(getClass().getClassLoader().getResourceAsStream("fmlbranding.properties"));
}
catch (Exception e)
{
// File not found - ignore
}
fmlBrandingProperties = Maps.fromProperties(loaded);
}
return fmlBrandingProperties;
}
public Map<String,String> getCustomModProperties(String modId)
{
return getIndexedModList().get(modId).getCustomModProperties();
}
}
+167 -9
View File
@@ -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
*/
@@ -18,12 +18,57 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import net.minecraft.item.ItemBlock;
import net.minecraft.network.packet.Packet250CustomPayload;
import cpw.mods.fml.common.event.FMLFingerprintViolationEvent;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLInterModComms;
import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerAboutToStartEvent;
import cpw.mods.fml.common.event.FMLServerStartedEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.event.FMLServerStoppedEvent;
import cpw.mods.fml.common.event.FMLServerStoppingEvent;
import cpw.mods.fml.common.event.FMLStateEvent;
import cpw.mods.fml.common.network.IPacketHandler;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
/**
* The new mod style in FML 1.3
* This defines a Mod to FML.
* Any class found with this annotation applied will be loaded as a Mod. The instance that is loaded will
* represent the mod to other Mods in the system. It will be sent various subclasses of {@link FMLEvent}
* at pre-defined times during the loading of the game, based on where you have applied the {@link EventHandler}
* annotation.
*
* This annotation is usually paired with a second annotation {@link NetworkMod}, which declares the
* network related properties of this mod.
*
* <p>This is a simple example of a Mod. It has the modId of "MyModId", the name of "My example mod", it is
* version 1.0, and depends on FML being loaded. It has the {@link NetworkMod} annotation as well, declaring it uses channel
* "MyModChannel" and {@link IPacketHandler} class PacketHandler.
* <pre>{@code
* package mymod;
* // Declare that this is a mod with modId "MyModId", name "My example mod", version "1.0" and dependency on FML.
* {@literal @}Mod(modId="MyModId",name="My example mod",version="1.0",dependencies="required-after:FML")
* // Declare that this is a network mod using the {@link Packet250CustomPayload} channel "MyModChannel", required on the client if it's present
* // on the server, with {@link IPacketHandler} class PacketHandler.
* {@literal @}NetworkMod(channels = { "MyModChannel" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class)
* public class MyMod {
* // Populate this field with the instance of the mod created by FML
* {@literal @}Instance("MyModId")
* public MyMod instance;
*
* // Mark this method for receiving an {@link FMLEvent} (in this case, it's the {@link FMLPreInitializationEvent})
* {@literal @}EventHandler public void preInit(FMLPreInitializationEvent event)
* {
* // Do stuff in pre-init phase (read config, create blocks and items, register them)
* }
* }
* </pre>
*
* @author cpw
*
@@ -65,10 +110,14 @@ public @interface Mod
* An optional bukkit plugin that will be injected into the bukkit plugin framework if
* this mod is loaded into the FML framework and the bukkit coremod is present.
* Instances of the bukkit plugin can be obtained via the {@link BukkitPluginRef} annotation on fields.
*
* This may be implemented by a bukkit integration. It is not provided with vanilla FML or MinecraftForge.
*
* @return The name of the plugin to load for this mod
*/
String bukkitPlugin() default "";
/**
* NOT YET IMPLEMENTED.</br>
* Mods that this mod will <strong>not</strong> load with.
* An optional comma separated string of (+|-)(*|modid[@value]) which specify mods that
* this mod will refuse to load with, resulting in the game failing to start.
@@ -98,34 +147,109 @@ public @interface Mod
*
* @return A string listing modids to exclude from loading with this mod.
*/
@Deprecated
String modExclusionList() default "";
/**
* Specifying this field allows for a mod to expect a signed jar with a fingerprint matching this value.
* The fingerprint should be SHA-1 encoded, lowercase with ':' removed. An empty value indicates that
* the mod is not expecting to be signed.
*
* Any incorrectness of the fingerprint, be it missing or wrong, will result in the {@link FingerprintWarning}
* method firing <i>prior to any other event on the mod</i>.
* Any incorrectness of the fingerprint, be it missing or wrong, will result in the {@link FMLFingerprintViolationEvent}
* event firing <i>prior to any other event on the mod</i>.
*
* @return A certificate fingerprint that is expected for this mod.
*/
String certificateFingerprint() default "";
/**
* The language the mod is authored in. This will be used to control certain libraries being downloaded.
* The language the mod is authored in. This will be used to control certain compatibility behaviours for this mod.
* Valid values are currently "java", "scala"
*
* @return The language the mod is authored in
*/
String modLanguage() default "java";
/**
* NOT YET IMPLEMENTED. </br>
* An optional ASM hook class, that can be used to apply ASM to classes loaded from this mod. It is also given
* the ASM tree of the class declaring {@link Mod} to with what it will.
* the ASM tree of the class declaring {@link Mod} to do with what it will.
*
* @return The name of a class to be loaded and executed. Must implement {@link IASMHook}.
*/
@Deprecated
String asmHookClass() default "";
/**
* A list of custom properties for this mod. Completely up to the mod author if/when they
* want to put anything in here.
* @return an optional list of custom properties
*/
CustomProperty[] customProperties() default {};
/**
* A custom key => value property pair for use with {@link Mod#customProperties()}
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({})
public @interface CustomProperty
{
/**
* A key. Should be unique.
* @return A key
*/
String k();
/**
* A value. Can be anything.
* @return A value
*/
String v();
}
/**
* Marks the associated method as handling an FML lifecycle event.
* The method must have a single parameter, one of the following types. This annotation
* replaces the multiple different annotations that previously were used.
*
* Current event classes. This first section is standard lifecycle events. They are dispatched
* at various phases as the game starts. Each event should have information useful to that
* phase of the lifecycle. They are fired in this order.
*
* These suggestions are mostly just suggestions on what to do in each event.
* <ul>
* <li> {@link FMLPreInitializationEvent} : Run before anything else. Read your config, create blocks,
* items, etc, and register them with the {@link GameRegistry}.</li>
* <li> {@link FMLInitializationEvent} : Do your mod setup. Build whatever data structures you care about. Register recipes,
* send {@link FMLInterModComms} messages to other mods.</li>
* <li> {@link FMLPostInitializationEvent} : Handle interaction with other mods, complete your setup based on this.</li>
* </ul>
* <p>These are the server lifecycle events. They are fired whenever a server is running, or about to run. Each time a server
* starts they will be fired in this sequence.
* <ul>
* <li> {@link FMLServerAboutToStartEvent} : Use if you need to handle something before the server has even been created.</li>
* <li> {@link FMLServerStartingEvent} : Do stuff you need to do to set up the server. register commands, tweak the server.</li>
* <li> {@link FMLServerStartedEvent} : Do what you need to with the running server.</li>
* <li> {@link FMLServerStoppingEvent} : Do what you need to before the server has started it's shutdown sequence.</li>
* <li> {@link FMLServerStoppedEvent} : Do whatever cleanup you need once the server has shutdown. Generally only useful
* on the integrated server.</li>
* </ul>
* The second set of events are more specialized, for receiving notification of specific
* information.
* <ul>
* <li> {@link FMLFingerprintViolationEvent} : Sent just before {@link FMLPreInitializationEvent}
* if something is wrong with your mod signature</li>
* <li> {@link IMCEvent} : Sent just after {@link FMLInitializationEvent} if you have IMC messages waiting
* from other mods</li>
* </ul>
*
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface EventHandler{}
/**
* Deprecated for {@link EventHandler}<br/>
* Mark the designated method as to be called at if there is something wrong with the certificate fingerprint of
* the mod's jar, or it is missing, or otherwise a problem.
* @author cpw
@@ -133,72 +257,90 @@ public @interface Mod
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Deprecated
public @interface FingerprintWarning {}
/**
* Deprecated for {@link EventHandler}<br/>
* Mark the designated method as being called at the "pre-initialization" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Deprecated
public @interface PreInit {}
/**
* Deprecated for {@link EventHandler}<br/>
* Mark the designated method as being called at the "initialization" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Deprecated
public @interface Init {}
/**
* Deprecated for {@link EventHandler}<br/>
* Mark the designated method as being called at the "post-initialization" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Deprecated
public @interface PostInit {}
/**
* Deprecated for {@link EventHandler}<br/>
* Mark the designated method as being called at the "server-about-to-start" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Deprecated
public @interface ServerAboutToStart {}
/**
* Deprecated for {@link EventHandler}<br/>
* Mark the designated method as being called at the "server-starting" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Deprecated
public @interface ServerStarting {}
/**
* Deprecated for {@link EventHandler}<br/>
* Mark the designated method as being called at the "server-started" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Deprecated
public @interface ServerStarted {}
/**
* Deprecated for {@link EventHandler}<br/>
* Mark the designated method as being called at the "server-stopping" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Deprecated
public @interface ServerStopping {}
/**
* Deprecated for {@link EventHandler}<br/>
* Mark the designated method as being called at the "server-stopped" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Deprecated
public @interface ServerStopped {}
/**
* Deprecated for {@link EventHandler}<br/>
* Mark the designated method as the receiver for {@link FMLInterModComms} messages
* Called between {@link Init} and {@link PostInit}
* @author cpw
@@ -206,9 +348,11 @@ public @interface Mod
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Deprecated
public @interface IMCCallback {}
/**
* Populate the annotated field with the mod instance.
* Populate the annotated field with the mod instance based on the specified ModId. This can be used
* to retrieve instances of other mods.
* @author cpw
*
*/
@@ -234,12 +378,14 @@ public @interface Mod
String value() default "";
}
/**
* Populate the annotated field with an instance of the Block as specified
* NOT IMPLEMENTED AND SCHEDULED FOR REMOVAL.<br/>
* Populate the annotated field with an instance of the Block as specified. This never worked. It will be removed.
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Deprecated
public @interface Block {
/**
* The block's name
@@ -251,12 +397,14 @@ public @interface Mod
Class<?> itemTypeClass() default ItemBlock.class;
}
/**
* Populate the annotated field with an Item
* NOT IMPLEMENTED AND SCHEDULED FOR REMOVAL.<br/>
* Populate the annotated field with an Item. This never worked. It will be removed.
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Deprecated
public @interface Item {
/**
* The name of the item
@@ -267,4 +415,14 @@ public @interface Mod
*/
String typeClass();
}
/**
* Mod instance factory method. Should return an instance of the mod. Applies only to static methods on the same class as {@link Mod}.
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface InstanceFactory {
}
}
@@ -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
*/
@@ -20,12 +20,13 @@ import java.net.URLClassLoader;
import java.util.List;
import java.util.logging.Level;
import net.minecraft.launchwrapper.LaunchClassLoader;
import com.google.common.collect.ImmutableList;
import cpw.mods.fml.common.asm.ASMTransformer;
import cpw.mods.fml.common.asm.transformers.AccessTransformer;
import cpw.mods.fml.common.modloader.BaseModProxy;
import cpw.mods.fml.relauncher.RelaunchClassLoader;
/**
* A simple delegating class loader used to load mods into the system
@@ -37,16 +38,16 @@ import cpw.mods.fml.relauncher.RelaunchClassLoader;
public class ModClassLoader extends URLClassLoader
{
private static final List<String> STANDARD_LIBRARIES = ImmutableList.of("jinput.jar", "lwjgl.jar", "lwjgl_util.jar");
private RelaunchClassLoader mainClassLoader;
private LaunchClassLoader mainClassLoader;
public ModClassLoader(ClassLoader parent) {
super(new URL[0], null);
this.mainClassLoader = (RelaunchClassLoader)parent;
this.mainClassLoader = (LaunchClassLoader)parent;
}
public void addFile(File modFile) throws MalformedURLException
{
URL url = modFile.toURI().toURL();
URL url = modFile.toURI().toURL();
mainClassLoader.addURL(url);
}
+6 -1
View File
@@ -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,8 +15,10 @@ package cpw.mods.fml.common;
import java.io.File;
import java.security.cert.Certificate;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.google.common.collect.ImmutableMap;
import com.google.common.eventbus.EventBus;
import cpw.mods.fml.common.versioning.ArtifactVersion;
@@ -131,4 +133,7 @@ public interface ModContainer
VersionRange acceptableMinecraftVersionRange();
Certificate getSigningCertificate();
public static final Map<String,String> EMPTY_PROPERTIES = ImmutableMap.of();
Map<String,String> getCustomModProperties();
}
+16 -5
View File
@@ -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
*/
@@ -17,6 +17,8 @@ import java.lang.reflect.Modifier;
import java.util.Set;
import java.util.logging.Level;
import com.google.common.base.Strings;
import cpw.mods.fml.common.discovery.ASMDataTable;
import cpw.mods.fml.common.discovery.ASMDataTable.ASMData;
import cpw.mods.fml.relauncher.Side;
@@ -27,7 +29,7 @@ import cpw.mods.fml.relauncher.Side;
*/
public class ProxyInjector
{
public static void inject(ModContainer mod, ASMDataTable data, Side side)
public static void inject(ModContainer mod, ASMDataTable data, Side side, ILanguageAdapter languageAdapter)
{
FMLLog.fine("Attempting to inject @SidedProxy classes into %s", mod.getModId());
Set<ASMData> targets = data.getAnnotationsFor(mod).get(SidedProxy.class.getName());
@@ -46,10 +48,16 @@ public class ProxyInjector
throw new LoaderException();
}
String targetType = side.isClient() ? target.getAnnotation(SidedProxy.class).clientSide() : target.getAnnotation(SidedProxy.class).serverSide();
SidedProxy annotation = target.getAnnotation(SidedProxy.class);
if (!Strings.isNullOrEmpty(annotation.modId()) && !annotation.modId().equals(mod.getModId()))
{
FMLLog.fine("Skipping proxy injection for %s.%s since it is not for mod %s", targ.getClassName(), targ.getObjectName(), mod.getModId());
continue;
}
String targetType = side.isClient() ? annotation.clientSide() : annotation.serverSide();
Object proxy=Class.forName(targetType, true, mcl).newInstance();
if ((target.getModifiers() & Modifier.STATIC) == 0 )
if (languageAdapter.supportsStatics() && (target.getModifiers() & Modifier.STATIC) == 0 )
{
FMLLog.severe("Attempted to load a proxy type %s into %s.%s, but the field is not static", targetType, targ.getClassName(), targ.getObjectName());
throw new LoaderException();
@@ -59,7 +67,7 @@ public class ProxyInjector
FMLLog.severe("Attempted to load a proxy type %s into %s.%s, but the types don't match", targetType, targ.getClassName(), targ.getObjectName());
throw new LoaderException();
}
target.set(null, proxy);
languageAdapter.setProxy(target, proxyTarget, proxy);
}
catch (Exception e)
{
@@ -67,5 +75,8 @@ public class ProxyInjector
throw new LoaderException(e);
}
}
// Allow language specific proxy injection.
languageAdapter.setInternalProxies(mod, side, mcl);
}
}
+33 -1
View File
@@ -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
*/
@@ -18,6 +18,29 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Sided proxies are loaded based on the specific environment they find themselves loaded into.
* They are used to ensure that client-specific code (such as GUIs) is only loaded into the game
* on the client side.
* It is applied to static fields of a class, anywhere in your mod code. FML will scan
* and load any classes with this annotation at mod construction time.
*
* <p>
* This example will load a CommonProxy on the server side, and a ClientProxy on the client side.
*
* <pre>{@code
* public class MySidedProxyHolder {
* {@literal @}SidedProxy(modId="MyModId",clientSide="mymod.ClientProxy", serverSide="mymod.CommonProxy")
* public static CommonProxy proxy;
* }
*
* public class CommonProxy {
* // Common or server stuff here that needs to be overridden on the client
* }
*
* public class ClientProxy extends CommonProxy {
* // Override common stuff with client specific stuff here
* }
* </pre>
* @author cpw
*
*/
@@ -35,8 +58,17 @@ public @interface SidedProxy
*/
String serverSide() default "";
@Deprecated
/**
* Not implemented
* The name of a special bukkit plugin class to load and populate
*/
String bukkitSide() default "";
/**
* The (optional) name of a mod to load this proxy for. This will help ensure correct behaviour when loading a combined
* scala/java mod package. It is almost never going to be required, unless you ship both Scala and Java {@link Mod} content
* in a single jar.
*/
String modId() default "";
}
@@ -5,13 +5,15 @@
* 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.asm;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Opcodes;
@@ -19,7 +21,6 @@ import org.objectweb.asm.Type;
import org.objectweb.asm.tree.ClassNode;
import cpw.mods.fml.common.registry.BlockProxy;
import cpw.mods.fml.relauncher.IClassTransformer;
public class ASMTransformer implements IClassTransformer
{
@@ -30,10 +30,13 @@ import java.security.cert.TrustAnchor;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.Collections;
import java.util.Locale;
import java.util.Map;
import javax.swing.JOptionPane;
import net.minecraft.launchwrapper.LaunchClassLoader;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.FieldVisitor;
@@ -41,9 +44,10 @@ import org.objectweb.asm.Opcodes;
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.RelaunchClassLoader;
public class FMLSanityChecker implements IFMLCallHook
{
@@ -68,7 +72,7 @@ public class FMLSanityChecker implements IFMLCallHook
}
}
private RelaunchClassLoader cl;
private LaunchClassLoader cl;
@Override
public Void call() throws Exception
@@ -137,8 +141,11 @@ public class FMLSanityChecker implements IFMLCallHook
@Override
public void injectData(Map<String, Object> data)
{
cl = (RelaunchClassLoader) data.get("classLoader");
FMLDeobfuscatingRemapper.INSTANCE.setup((File)data.get("mcLocation"), cl, (String) data.get("deobfuscationFileName"));
cl = (LaunchClassLoader) data.get("classLoader");
File mcDir = (File)data.get("mcLocation");
FMLDeobfuscatingRemapper.INSTANCE.setup(mcDir, cl, (String) data.get("deobfuscationFileName"));
File binpatches = new File(mcDir,"binpatch");
ClassPatchManager.INSTANCE.setup(FMLLaunchHandler.side());
}
}
@@ -32,6 +32,8 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.tree.ClassNode;
@@ -48,7 +50,7 @@ import com.google.common.io.LineProcessor;
import com.google.common.io.Resources;
import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper;
import cpw.mods.fml.relauncher.IClassTransformer;
import cpw.mods.fml.relauncher.FMLRelaunchLog;
public class AccessTransformer implements IClassTransformer
{
@@ -152,6 +154,7 @@ public class AccessTransformer implements IClassTransformer
return true;
}
});
System.out.printf("Loaded %d rules from AccessTransformer config file %s\n", modifiers.size(), rulesFile);
}
@SuppressWarnings("unchecked")
@@ -163,7 +166,7 @@ public class AccessTransformer implements IClassTransformer
if (DEBUG)
{
System.out.printf("Considering all methods and fields on %s (%s): %b\n", name, transformedName, makeAllPublic);
FMLRelaunchLog.fine("Considering all methods and fields on %s (%s): %b\n", name, transformedName, makeAllPublic);
}
if (!makeAllPublic && !modifiers.containsKey(name)) { return bytes; }
@@ -5,13 +5,16 @@
* 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.asm.transformers;
import net.minecraft.launchwrapper.IClassNameTransformer;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Opcodes;
@@ -20,8 +23,6 @@ import org.objectweb.asm.tree.ClassNode;
import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper;
import cpw.mods.fml.common.asm.transformers.deobf.FMLRemappingAdapter;
import cpw.mods.fml.relauncher.IClassNameTransformer;
import cpw.mods.fml.relauncher.IClassTransformer;
public class DeobfuscationTransformer implements IClassTransformer, IClassNameTransformer {
@@ -58,6 +58,7 @@ public class MCPMerger
private static HashSet<String> copyToServer = new HashSet<String>();
private static HashSet<String> copyToClient = new HashSet<String>();
private static HashSet<String> dontAnnotate = new HashSet<String>();
private static HashSet<String> dontProcess = new HashSet<String>();
private static final boolean DEBUG = false;
public static void main(String[] args)
@@ -71,9 +72,8 @@ public class MCPMerger
File map_file = new File(args[0]);
File client_jar = new File(args[1]);
File server_jar = new File(args[2]);
File client_jar_tmp = new File(args[1] + ".MergeBack");
File server_jar_tmp = new File(args[2] + ".MergeBack");
File client_jar_tmp = new File(args[1] + ".backup_merge");
File server_jar_tmp = new File(args[2] + ".backup_merge");
if (client_jar_tmp.exists() && !client_jar_tmp.delete())
{
@@ -155,7 +155,8 @@ public class MCPMerger
{
case '!': dontAnnotate.add(line); break;
case '<': copyToClient.add(line); break;
case '>': copyToServer.add(line); break;
case '>': copyToServer.add(line); break;
case '^': dontProcess.add(line); break;
}
}
@@ -344,8 +345,20 @@ public class MCPMerger
outFile.putNextEntry(entry);
continue;
}
String entryName = entry.getName();
if (!entryName.endsWith(".class") || entryName.startsWith("."))
boolean filtered = false;
for (String filter : dontProcess)
{
if (entryName.startsWith(filter))
{
filtered = true;
break;
}
}
if (filtered || !entryName.endsWith(".class") || entryName.startsWith("."))
{
ZipEntry newEntry = new ZipEntry(entry.getName());
outFile.putNextEntry(newEntry);
@@ -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
*/
@@ -26,6 +26,8 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.tree.ClassNode;
@@ -39,8 +41,6 @@ import com.google.common.collect.Lists;
import com.google.common.io.LineProcessor;
import com.google.common.io.Resources;
import cpw.mods.fml.relauncher.IClassTransformer;
public class MarkerTransformer implements IClassTransformer
{
private ListMultimap<String, String> markers = ArrayListMultimap.create();
@@ -0,0 +1,13 @@
package cpw.mods.fml.common.asm.transformers;
import net.minecraft.launchwrapper.IClassTransformer;
import cpw.mods.fml.common.patcher.ClassPatchManager;
public class PatchingTransformer implements IClassTransformer {
@Override
public byte[] transform(String name, String transformedName, byte[] bytes)
{
return ClassPatchManager.INSTANCE.applyPatch(name, transformedName, 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
*/
@@ -15,6 +15,8 @@ package cpw.mods.fml.common.asm.transformers;
import java.util.Iterator;
import java.util.List;
import net.minecraft.launchwrapper.IClassTransformer;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.Type;
@@ -23,13 +25,12 @@ import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.FieldNode;
import org.objectweb.asm.tree.MethodNode;
import cpw.mods.fml.relauncher.FMLRelauncher;
import cpw.mods.fml.relauncher.IClassTransformer;
import cpw.mods.fml.relauncher.FMLLaunchHandler;
import cpw.mods.fml.relauncher.SideOnly;
public class SideTransformer implements IClassTransformer
{
private static String SIDE = FMLRelauncher.side();
private static String SIDE = FMLLaunchHandler.side().name();
private static final boolean DEBUG = false;
@SuppressWarnings("unchecked")
@Override
@@ -13,6 +13,7 @@
package cpw.mods.fml.common.asm.transformers.deobf;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -23,9 +24,12 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import net.minecraft.launchwrapper.LaunchClassLoader;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.commons.Remapper;
@@ -38,7 +42,9 @@ import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -48,7 +54,8 @@ import com.google.common.io.InputSupplier;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.relauncher.FMLRelaunchLog;
import cpw.mods.fml.relauncher.RelaunchClassLoader;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.FieldNode;
public class FMLDeobfuscatingRemapper extends Remapper {
public static final FMLDeobfuscatingRemapper INSTANCE = new FMLDeobfuscatingRemapper();
@@ -62,7 +69,7 @@ public class FMLDeobfuscatingRemapper extends Remapper {
private Map<String,Map<String,String>> fieldNameMaps;
private Map<String,Map<String,String>> methodNameMaps;
private RelaunchClassLoader classLoader;
private LaunchClassLoader classLoader;
private FMLDeobfuscatingRemapper()
{
@@ -70,17 +77,61 @@ public class FMLDeobfuscatingRemapper extends Remapper {
mcpNameBiMap=ImmutableBiMap.of();
}
public void setup(File mcDir, RelaunchClassLoader classLoader, String deobfFileName)
public void setupLoadOnly(String deobfFileName, boolean loadAll)
{
try
{
File mapData = new File(deobfFileName);
LZMAInputSupplier zis = new LZMAInputSupplier(new FileInputStream(mapData));
InputSupplier<InputStreamReader> srgSupplier = CharStreams.newReaderSupplier(zis,Charsets.UTF_8);
List<String> srgList = CharStreams.readLines(srgSupplier);
rawMethodMaps = Maps.newHashMap();
rawFieldMaps = Maps.newHashMap();
Builder<String, String> builder = ImmutableBiMap.<String,String>builder();
Builder<String, String> mcpBuilder = ImmutableBiMap.<String,String>builder();
Splitter splitter = Splitter.on(CharMatcher.anyOf(": ")).omitEmptyStrings().trimResults();
for (String line : srgList)
{
String[] parts = Iterables.toArray(splitter.split(line),String.class);
String typ = parts[0];
if ("CL".equals(typ))
{
parseClass(builder, parts);
parseMCPClass(mcpBuilder,parts);
}
else if ("MD".equals(typ) && loadAll)
{
parseMethod(parts);
}
else if ("FD".equals(typ) && loadAll)
{
parseField(parts);
}
}
classNameBiMap = builder.build();
// Special case some mappings for modloader mods
mcpBuilder.put("BaseMod","net/minecraft/src/BaseMod");
mcpBuilder.put("ModLoader","net/minecraft/src/ModLoader");
mcpBuilder.put("EntityRendererProxy","net/minecraft/src/EntityRendererProxy");
mcpBuilder.put("MLProp","net/minecraft/src/MLProp");
mcpBuilder.put("TradeEntry","net/minecraft/src/TradeEntry");
mcpNameBiMap = mcpBuilder.build();
}
catch (IOException ioe)
{
Logger.getLogger("FML").log(Level.SEVERE, "An error occurred loading the deobfuscation map data", ioe);
}
methodNameMaps = Maps.newHashMapWithExpectedSize(rawMethodMaps.size());
fieldNameMaps = Maps.newHashMapWithExpectedSize(rawFieldMaps.size());
}
public void setup(File mcDir, LaunchClassLoader classLoader, String deobfFileName)
{
this.classLoader = classLoader;
try
{
File libDir = new File(mcDir, "lib");
File mapData = new File(libDir, deobfFileName);
mapData = mapData.getCanonicalFile();
ZipFile mapZip = new ZipFile(mapData);
ZipEntry classData = mapZip.getEntry("joined.srg");
ZipInputSupplier zis = new ZipInputSupplier(mapZip, classData);
InputStream classData = getClass().getResourceAsStream(deobfFileName);
LZMAInputSupplier zis = new LZMAInputSupplier(classData);
InputSupplier<InputStreamReader> srgSupplier = CharStreams.newReaderSupplier(zis,Charsets.UTF_8);
List<String> srgList = CharStreams.readLines(srgSupplier);
rawMethodMaps = Maps.newHashMap();
@@ -125,7 +176,8 @@ public class FMLDeobfuscatingRemapper extends Remapper {
public boolean isRemappedClass(String className)
{
return classNameBiMap.containsKey(className) || mcpNameBiMap.containsKey(className);
className = className.replace('.', '/');
return classNameBiMap.containsKey(className) || mcpNameBiMap.containsKey(className) || (!classNameBiMap.isEmpty() && className.indexOf('/') == -1);
}
private void parseField(String[] parts)
@@ -141,7 +193,46 @@ public class FMLDeobfuscatingRemapper extends Remapper {
{
rawFieldMaps.put(cl, Maps.<String,String>newHashMap());
}
rawFieldMaps.get(cl).put(oldName, newName);
rawFieldMaps.get(cl).put(oldName + ":" + getFieldType(cl, oldName), newName);
rawFieldMaps.get(cl).put(oldName + ":null", newName);
}
/*
* Cache the field descriptions for classes so we don't repeatedly reload the same data again and again
*/
private Map<String,Map<String,String>> fieldDescriptions = Maps.newHashMap();
private String getFieldType(String owner, String name)
{
if (fieldDescriptions.containsKey(owner))
{
return fieldDescriptions.get(owner).get(name);
}
synchronized (fieldDescriptions)
{
try
{
byte[] classBytes = classLoader.getClassBytes(owner);
if (classBytes == null)
{
return null;
}
ClassReader cr = new ClassReader(classBytes);
ClassNode classNode = new ClassNode();
cr.accept(classNode, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
Map<String,String> resMap = Maps.newHashMap();
for (FieldNode fieldNode : (List<FieldNode>) classNode.fields) {
resMap.put(fieldNode.name, fieldNode.desc);
}
fieldDescriptions.put(owner, resMap);
return resMap.get(name);
}
catch (IOException e)
{
FMLLog.log(Level.SEVERE,e, "A critical exception occured reading a class file %s", owner);
}
return null;
}
}
private void parseClass(Builder<String, String> builder, String[] parts)
@@ -180,7 +271,7 @@ public class FMLDeobfuscatingRemapper extends Remapper {
return name;
}
Map<String, String> fieldMap = getFieldMap(owner);
return fieldMap!=null && fieldMap.containsKey(name) ? fieldMap.get(name) : name;
return fieldMap!=null && fieldMap.containsKey(name+":"+desc) ? fieldMap.get(name+":"+desc) : name;
}
@Override
@@ -319,4 +410,9 @@ public class FMLDeobfuscatingRemapper extends Remapper {
fieldNameMaps.put(name, ImmutableMap.copyOf(fieldMap));
// System.out.printf("Maps: %s %s\n", name, methodMap);
}
public Set<String> getObfedClasses()
{
return ImmutableSet.copyOf(classNameBiMap.keySet());
}
}
@@ -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
*/
@@ -17,22 +17,22 @@ import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import LZMA.LzmaInputStream;
import com.google.common.io.InputSupplier;
public class ZipInputSupplier implements InputSupplier<InputStream> {
private ZipFile zipFile;
private ZipEntry zipEntry;
public class LZMAInputSupplier implements InputSupplier<InputStream> {
private InputStream compressedData;
public ZipInputSupplier(ZipFile zip, ZipEntry entry)
public LZMAInputSupplier(InputStream compressedData)
{
this.zipFile = zip;
this.zipEntry = entry;
this.compressedData = compressedData;
}
@Override
public InputStream getInput() throws IOException
{
return zipFile.getInputStream(zipEntry);
return new LzmaInputStream(this.compressedData);
}
}
@@ -27,7 +27,7 @@ import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.LoaderException;
import cpw.mods.fml.common.ModClassLoader;
import cpw.mods.fml.common.ModContainer;
import cpw.mods.fml.relauncher.RelaunchLibraryManager;
import cpw.mods.fml.relauncher.CoreModManager;
public class ModDiscoverer
{
@@ -41,7 +41,7 @@ public class ModDiscoverer
public void findClasspathMods(ModClassLoader modClassLoader)
{
List<String> knownLibraries = ImmutableList.<String>builder().addAll(modClassLoader.getDefaultLibraries()).addAll(RelaunchLibraryManager.getLibraries()).build();
List<String> knownLibraries = ImmutableList.<String>builder().addAll(modClassLoader.getDefaultLibraries()).addAll(CoreModManager.getLibraries()).build();
File[] minecraftSources = modClassLoader.getParentSources();
if (minecraftSources.length == 1 && minecraftSources[0].isFile())
{
@@ -0,0 +1,12 @@
package cpw.mods.fml.common.functions;
import com.google.common.base.Function;
import cpw.mods.fml.common.versioning.ArtifactVersion;
public class ArtifactVersionNameFunction implements Function<ArtifactVersion, String> {
public String apply(ArtifactVersion v)
{
return v.getLabel();
}
}
@@ -0,0 +1,18 @@
package cpw.mods.fml.common.launcher;
import cpw.mods.fml.relauncher.FMLLaunchHandler;
import net.minecraft.launchwrapper.LaunchClassLoader;
public class FMLServerTweaker extends FMLTweaker {
@Override
public String getLaunchTarget()
{
return "net.minecraft.server.MinecraftServer";
}
@Override
public void injectIntoClassLoader(LaunchClassLoader classLoader)
{
FMLLaunchHandler.configureForServerLaunch(classLoader, this);
}
}
@@ -0,0 +1,98 @@
package cpw.mods.fml.common.launcher;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.google.common.base.Throwables;
import com.google.common.collect.ObjectArrays;
import cpw.mods.fml.relauncher.FMLLaunchHandler;
import net.minecraft.launchwrapper.ITweaker;
import net.minecraft.launchwrapper.LaunchClassLoader;
public class FMLTweaker implements ITweaker {
private List<String> args;
private File gameDir;
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;
try
{
jarLocation = getClass().getProtectionDomain().getCodeSource().getLocation().toURI();
}
catch (URISyntaxException e)
{
Logger.getLogger("FMLTWEAK").log(Level.SEVERE, "Missing URI information for FML tweak");
throw Throwables.propagate(e);
}
}
@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.");
FMLLaunchHandler.configureForClientLaunch(classLoader, this);
}
@Override
public String getLaunchTarget()
{
return "net.minecraft.client.main.Main";
}
@Override
public String[] getLaunchArguments()
{
String[] array = args.toArray(new String[args.size()]);
if (gameDir != null)
{
array = ObjectArrays.concat(gameDir.getAbsolutePath(),array);
array = ObjectArrays.concat("--gameDir",array);
}
if (assetsDir != null)
{
array = ObjectArrays.concat(assetsDir.getAbsolutePath(),array);
array = ObjectArrays.concat("--assetsDir",array);
}
if (profile != null)
{
array = ObjectArrays.concat(profile,array);
array = ObjectArrays.concat("--version",array);
}
else
{
array = ObjectArrays.concat("UnknownFMLProfile",array);
array = ObjectArrays.concat("--version",array);
}
return array;
}
public File getGameDir()
{
return gameDir;
}
public static URI getJarLocation()
{
return jarLocation;
}
}
@@ -40,6 +40,7 @@ import com.google.common.eventbus.Subscribe;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.ILanguageAdapter;
import cpw.mods.fml.common.LoadController;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.LoaderException;
@@ -496,7 +497,7 @@ public class ModLoaderModContainer implements ModContainer
{
dummyHandler.setBaseMod(mod);
}
ProxyInjector.inject(this, event.getASMHarvestedData(), FMLCommonHandler.instance().getSide());
ProxyInjector.inject(this, event.getASMHarvestedData(), FMLCommonHandler.instance().getSide(), new ILanguageAdapter.JavaAdapter());
}
catch (Exception e)
{
@@ -614,4 +615,10 @@ public class ModLoaderModContainer implements ModContainer
{
return null;
}
@Override
public Map<String, String> getCustomModProperties()
{
return EMPTY_PROPERTIES;
}
}
@@ -184,8 +184,7 @@ public class EntitySpawnPacket extends FMLPacket
ModContainer mc = nmh.getContainer();
EntityRegistration registration = EntityRegistry.instance().lookupModSpawn(mc, modEntityId);
Class<? extends Entity> cls = registration.getEntityClass();
if (cls == null)
if (registration == null || registration.getEntityClass() == null)
{
FMLLog.log(Level.WARNING, "Missing mod entity information for %s : %d", mc.getModId(), modEntityId);
return;
@@ -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,6 +41,7 @@ import com.google.common.hash.Hashing;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.InjectedModContainer;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ModContainer;
import cpw.mods.fml.common.discovery.ASMDataTable;
@@ -269,6 +270,10 @@ public class FMLNetworkHandler
public NetworkModHandler findNetworkModHandler(Object mc)
{
if (mc instanceof InjectedModContainer)
{
return networkModHandlers.get(((InjectedModContainer)mc).wrappedContainer);
}
if (mc instanceof ModContainer)
{
return networkModHandlers.get(mc);
@@ -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
*/
@@ -96,6 +96,10 @@ public class NetworkModHandler
}
}
configureNetworkMod(container);
}
protected void configureNetworkMod(ModContainer container)
{
if (this.checkHandler == null)
{
String versionBounds = mod.versionBounds();
@@ -0,0 +1,23 @@
package cpw.mods.fml.common.patcher;
public class ClassPatch {
public final String name;
public final String sourceClassName;
public final String targetClassName;
public final boolean existsAtTarget;
public final byte[] patch;
public ClassPatch(String name, String sourceClassName, String targetClassName, boolean existsAtTarget, byte[] patch)
{
this.name = name;
this.sourceClassName = sourceClassName;
this.targetClassName = targetClassName;
this.existsAtTarget = existsAtTarget;
this.patch = patch;
}
@Override
public String toString()
{
return String.format("%s : %s => %s (%b) size %d", name, sourceClassName, targetClassName, existsAtTarget, patch.length);
}
}
@@ -0,0 +1,145 @@
package cpw.mods.fml.common.patcher;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.net.URISyntaxException;
import java.security.CodeSource;
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;
import java.util.regex.Pattern;
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.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;
import cpw.mods.fml.repackage.com.nothome.delta.GDiffPatcher;
public class ClassPatchManager {
public static final ClassPatchManager INSTANCE = new ClassPatchManager();
private GDiffPatcher patcher = new GDiffPatcher();
private ListMultimap<String, ClassPatch> patches;
private ClassPatchManager()
{
}
public byte[] applyPatch(String name, String mappedName, byte[] inputData)
{
if (patches == null)
{
return inputData;
}
List<ClassPatch> list = patches.get(name);
if (list.isEmpty())
{
return inputData;
}
for (ClassPatch patch: list)
{
if (!patch.targetClassName.equals(mappedName))
{
FMLLog.warning("Binary patch found %s for wrong class %s", patch.targetClassName, mappedName);
}
if (!patch.existsAtTarget && (inputData == null || inputData.length == 0))
{
inputData = new byte[0];
}
else if (!patch.existsAtTarget)
{
FMLLog.warning("Patcher expecting empty class data file for %s, but received non-empty", patch.targetClassName);
}
synchronized (patcher)
{
try
{
inputData = patcher.patch(inputData, patch.patch);
}
catch (IOException e)
{
FMLLog.log(Level.SEVERE, e, "Encountered problem runtime patching class %s", name);
continue;
}
}
}
FMLLog.fine("Successfully applied runtime patches for %s", mappedName);
return inputData;
}
public void setup(Side side)
{
Pattern binpatchMatcher = Pattern.compile(String.format("binpatch/%s/.*.binpatch", side.toString().toLowerCase(Locale.ENGLISH)));
JarFile fmlJar;
try
{
FMLRelaunchLog.fine("FML URI is %s", FMLTweaker.getJarLocation());
File fmlJarFile = new File(FMLTweaker.getJarLocation());
if (!fmlJarFile.exists() || !fmlJarFile.isFile())
{
FMLRelaunchLog.log(Level.INFO, "Not found an FML jar, I assume you're developing FML. Hi cpw or Lex!");
patches = ArrayListMultimap.create();
return;
}
fmlJar = new JarFile(fmlJarFile);
}
catch (Exception e)
{
FMLRelaunchLog.log(Level.SEVERE, e, "Error occurred reading binary patches. Problems may occur");
throw Throwables.propagate(e);
}
patches = ArrayListMultimap.create();
for (JarEntry entry : Collections.list(fmlJar.entries()))
{
if (binpatchMatcher.matcher(entry.getName()).matches())
{
ClassPatch cp = readPatch(entry, fmlJar);
if (cp != null)
{
patches.put(cp.sourceClassName, cp);
}
}
}
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()));
}
private ClassPatch readPatch(JarEntry patchEntry, JarFile jarFile)
{
FMLLog.finest("Reading patch data from %s in file %s", patchEntry.getName(), jarFile.getName());
ByteArrayDataInput input;
try
{
input = ByteStreams.newDataInput(ByteStreams.toByteArray(jarFile.getInputStream(patchEntry)));
}
catch (IOException e)
{
FMLLog.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 patchLength = input.readInt();
byte[] patchBytes = new byte[patchLength];
input.readFully(patchBytes);
return new ClassPatch(name, sourceClassName, targetClassName, exists, patchBytes);
}
}
@@ -0,0 +1,5 @@
package cpw.mods.fml.common.patcher;
public class ClassPatchingTransformer {
}
@@ -0,0 +1,83 @@
package cpw.mods.fml.common.patcher;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.google.common.collect.Iterables;
import com.google.common.collect.Iterators;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.google.common.io.Files;
import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper;
import cpw.mods.fml.repackage.com.nothome.delta.Delta;
public class GenDiffSet {
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 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
Logger.getLogger("GENDIFF").log(Level.INFO, String.format("Creating patches at %s for %s from %s", outputDir, sourceJar, targetDir));
Delta delta = new Delta();
FMLDeobfuscatingRemapper remapper = FMLDeobfuscatingRemapper.INSTANCE;
remapper.setupLoadOnly(deobfData, false);
JarFile sourceZip = new JarFile(sourceJar);
boolean kill = killTarget.equalsIgnoreCase("true");
File f = new File(outputDir);
f.mkdirs();
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");
if (targetFile.exists())
{
String sourceClassName = name.replace('/', '.');
String targetClassName = remapper.map(name).replace('/', '.');
JarEntry entry = sourceZip.getJarEntry(name);
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);
// Source name
diffOut.writeUTF(sourceClassName);
// Target name
diffOut.writeUTF(targetClassName);
// exists at original
diffOut.writeBoolean(entry != null);
// length of patch
diffOut.writeInt(diff.length);
// patch
diffOut.write(diff);
File target = new File(outputDir, targetClassName+".binpatch");
target.getParentFile().mkdirs();
Files.write(diffOut.toByteArray(), target);
Logger.getLogger("GENDIFF").info(String.format("Wrote patch for %s (%s) at %s",name, targetClassName, target.getAbsolutePath()));
if (kill)
{
targetFile.delete();
Logger.getLogger("GENDIFF").info(String.format(" Deleted target: %s", targetFile.toString()));
}
}
}
sourceZip.close();
}
}
@@ -25,11 +25,17 @@ import java.util.logging.Level;
import net.minecraft.block.Block;
import net.minecraft.block.BlockSand;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import com.google.common.base.Charsets;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Throwables;
import com.google.common.base.Joiner.MapJoiner;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableTable;
import com.google.common.collect.ImmutableTable.Builder;
@@ -40,6 +46,7 @@ import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.collect.Table;
import com.google.common.collect.Table.Cell;
import com.google.common.io.Files;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Loader;
@@ -54,6 +61,7 @@ public class GameData {
private static boolean shouldContinue = true;
private static boolean isSaveValid = true;
private static ImmutableTable<String, String, Integer> modObjectTable;
private static Table<String, String, ItemStack> customItemStacks = HashBasedTable.create();
private static Map<String,String> ignoredMods;
private static boolean isModIgnoredForIdValidation(String modId)
@@ -277,7 +285,7 @@ public class GameData {
}
static Item findItem(String modId, String name)
{
if (modObjectTable == null)
if (modObjectTable == null || !modObjectTable.contains(modId, name))
{
return null;
}
@@ -293,10 +301,65 @@ public class GameData {
}
Integer blockId = modObjectTable.get(modId, name);
if (blockId >= Block.field_71973_m.length)
if (blockId == null || blockId >= Block.field_71973_m.length)
{
return null;
}
return Block.field_71973_m[blockId];
}
static ItemStack findItemStack(String modId, String name)
{
ItemStack is = customItemStacks.get(modId, name);
if (is == null)
{
Item i = findItem(modId, name);
if (i != null)
{
is = new ItemStack(i, 0 ,0);
}
}
if (is == null)
{
Block b = findBlock(modId, name);
if (b != null)
{
is = new ItemStack(b, 0, Short.MAX_VALUE);
}
}
return is;
}
static void registerCustomItemStack(String name, ItemStack itemStack)
{
customItemStacks.put(Loader.instance().activeModContainer().getModId(), name, itemStack);
}
public static void dumpRegistry(File minecraftDir)
{
if (customItemStacks == null)
{
return;
}
if (Boolean.valueOf(System.getProperty("fml.dumpRegistry", "false")).booleanValue())
{
ImmutableListMultimap.Builder<String, String> builder = ImmutableListMultimap.builder();
for (String modId : customItemStacks.rowKeySet())
{
builder.putAll(modId, customItemStacks.row(modId).keySet());
}
File f = new File(minecraftDir, "itemStackRegistry.csv");
MapJoiner mapJoiner = Joiner.on("\n").withKeyValueSeparator(",");
try
{
Files.write(mapJoiner.join(builder.build().entries()), f, Charsets.UTF_8);
FMLLog.log(Level.INFO, "Dumped item registry data to %s", f.getAbsolutePath());
}
catch (IOException e)
{
FMLLog.log(Level.SEVERE, e, "Failed to write registry data to %s", f.getAbsolutePath());
}
}
}
}
@@ -221,7 +221,7 @@ public class GameRegistry
}
catch (NoSuchMethodException e)
{
itemCtor = itemclass.getConstructor(int.class, Block.class);
itemCtor = itemclass.getConstructor(int.class, net.minecraft.block.Block.class);
i = itemCtor.newInstance(blockItemId, block);
}
GameRegistry.registerItem(i,name, modId);
@@ -275,7 +275,7 @@ public class GameRegistry
public static void registerTileEntityWithAlternatives(Class<? extends TileEntity> tileEntityClass, String id, String... alternatives)
{
TileEntity.func_70306_a(tileEntityClass, id);
Map<String,Class> teMappings = ObfuscationReflectionHelper.getPrivateValue(TileEntity.class, null, "field_70326_a", "a");
Map<String,Class> teMappings = ObfuscationReflectionHelper.getPrivateValue(TileEntity.class, null, "field_" + "70326_a", "field_70326_a", "a");
for (String s: alternatives)
{
if (!teMappings.containsKey(s))
@@ -394,4 +394,40 @@ public class GameRegistry
{
return GameData.findItem(modId, name);
}
/**
* Manually register a custom item stack with FML for later tracking. It is automatically scoped with the active modid
*
* @param name The name to register it under
* @param itemStack The itemstack to register
*/
public static void registerCustomItemStack(String name, ItemStack itemStack)
{
GameData.registerCustomItemStack(name, itemStack);
}
/**
* Lookup an itemstack based on mod and name. It will create "default" itemstacks from blocks and items if no
* explicit itemstack is found.
*
* If it is built from a block, the metadata is by default the "wildcard" value.
*
* Custom itemstacks can be dumped from minecraft by setting the system property fml.dumpRegistry to true
* (-Dfml.dumpRegistry=true on the command line will work)
*
* @param modId The modid of the stack owner
* @param name The name of the stack
* @param stackSize The size of the stack returned
* @return The custom itemstack or null if no such itemstack was found
*/
public static ItemStack findItemStack(String modId, String name, int stackSize)
{
ItemStack foundStack = GameData.findItemStack(modId, name);
if (foundStack != null)
{
ItemStack is = foundStack.func_77946_l();
is.field_77994_a = Math.min(stackSize, is.func_77976_d());
return is;
}
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
*/
@@ -28,6 +28,7 @@ import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ModContainer;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.StringTranslate;
@@ -45,7 +46,7 @@ public class LanguageRegistry
public String getStringLocalization(String key)
{
return getStringLocalization(key, StringTranslate.func_74808_a().func_74811_c());
return getStringLocalization(key, Minecraft.func_71410_x().func_135016_M().func_135041_c().func_135034_a());
}
public String getStringLocalization(String key, String lang)
@@ -93,9 +94,9 @@ public class LanguageRegistry
public static void reloadLanguageTable()
{
// reload language table by forcing lang to null and reloading the properties file
String lang = StringTranslate.func_74808_a().func_74811_c();
StringTranslate.func_74808_a().func_74810_a(lang, true);
// // reload language table by forcing lang to null and reloading the properties file
// String lang = StringTranslate.func_74808_a().func_74811_c();
// StringTranslate.func_74808_a().func_74810_a(lang, true);
}
@@ -120,17 +121,17 @@ public class LanguageRegistry
instance().addNameForObject(objectToName, "en_US", name);
}
public void loadLanguageTable(Properties languagePack, String lang)
public void loadLanguageTable(Map field_135032_a, String lang)
{
Properties usPack=modLanguageData.get("en_US");
if (usPack!=null) {
languagePack.putAll(usPack);
field_135032_a.putAll(usPack);
}
Properties langPack=modLanguageData.get(lang);
if (langPack==null) {
return;
}
languagePack.putAll(langPack);
field_135032_a.putAll(langPack);
}
public void loadLocalization(String localizationFile, String lang, boolean isXML)
@@ -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
*/
@@ -19,6 +19,7 @@ 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.Tuple;
@@ -32,6 +33,8 @@ import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/**
* Registry for villager trading control
@@ -45,8 +48,9 @@ public class VillagerRegistry
private Multimap<Integer, IVillageTradeHandler> tradeHandlers = ArrayListMultimap.create();
private Map<Class<?>, IVillageCreationHandler> villageCreationHandlers = Maps.newHashMap();
private Map<Integer, String> newVillagers = Maps.newHashMap();
private List<Integer> newVillagerIds = Lists.newArrayList();
@SideOnly(Side.CLIENT)
private Map<Integer, ResourceLocation> newVillagers;
/**
* Allow access to the {@link net.minecraft.world.gen.structure.StructureVillagePieces} array controlling new village
@@ -110,21 +114,33 @@ public class VillagerRegistry
return INSTANCE;
}
/**
* Register your villager id
* @param id
*/
public void registerVillagerId(int id)
{
if (newVillagerIds.contains(id))
{
FMLLog.severe("Attempt to register duplicate villager id %d", id);
throw new RuntimeException();
}
newVillagerIds.add(id);
}
/**
* Register a new skin for a villager type
*
* @param villagerId
* @param villagerSkin
*/
public void registerVillagerType(int villagerId, String villagerSkin)
@SideOnly(Side.CLIENT)
public void registerVillagerSkin(int villagerId, ResourceLocation villagerSkin)
{
if (newVillagers.containsKey(villagerId))
if (newVillagers == null)
{
FMLLog.severe("Attempt to register duplicate villager id %d", villagerId);
throw new RuntimeException();
newVillagers = Maps.newHashMap();
}
newVillagers.put(villagerId, villagerSkin);
newVillagerIds.add(villagerId);
}
/**
@@ -154,7 +170,8 @@ public class VillagerRegistry
* @param villagerType
* @param defaultSkin
*/
public static String getVillagerSkin(int villagerType, String defaultSkin)
@SideOnly(Side.CLIENT)
public static ResourceLocation getVillagerSkin(int villagerType, ResourceLocation defaultSkin)
{
if (instance().newVillagers.containsKey(villagerType))
{
@@ -32,10 +32,10 @@ public class ModSorter
{
private DirectedGraph<ModContainer> modGraph;
private ModContainer beforeAll = new DummyModContainer();
private ModContainer afterAll = new DummyModContainer();
private ModContainer before = new DummyModContainer();
private ModContainer after = new DummyModContainer();
private ModContainer beforeAll = new DummyModContainer("BeforeAll");
private ModContainer afterAll = new DummyModContainer("AfterAll");
private ModContainer before = new DummyModContainer("Before");
private ModContainer after = new DummyModContainer("After");
public ModSorter(List<ModContainer> modList, Map<String, ModContainer> nameLookup)
{
@@ -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
*/
@@ -25,6 +25,11 @@ import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import com.google.common.collect.Sets;
import com.google.common.collect.Sets.SetView;
import cpw.mods.fml.common.FMLLog;
/**
* Topological sort for mod loading
*
@@ -174,8 +179,14 @@ public class TopologicalSort
return;
}
System.out.printf("%s: %s\n%s\n%s\n", node, sortedResult, visitedNodes, expandedNodes);
throw new ModSortingException("There was a cycle detected in the input graph, sorting is not possible", node, visitedNodes);
FMLLog.severe("Mod Sorting failed.");
FMLLog.severe("Visting node %s", node);
FMLLog.severe("Current sorted list : %s", sortedResult);
FMLLog.severe("Visited set for this node : %s", visitedNodes);
FMLLog.severe("Explored node set : %s", expandedNodes);
SetView<T> cycleList = Sets.difference(visitedNodes, expandedNodes);
FMLLog.severe("Likely cycle is in : %s", cycleList);
throw new ModSortingException("There was a cycle detected in the input graph, sorting is not possible", node, cycleList);
}
// Visit this node
@@ -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
*/
@@ -98,4 +98,9 @@ public class DefaultArtifactVersion implements ArtifactVersion
{
return label == null ? comparableVersion.toString() : label + ( unbounded ? "" : "@" + range);
}
public VersionRange getRange()
{
return range;
}
}
@@ -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
*/
@@ -549,4 +549,15 @@ public class VersionRange
hash = 31 * hash + ( restrictions == null ? 0 : restrictions.hashCode() );
return hash;
}
public boolean isUnboundedAbove()
{
return restrictions.size() == 1 && restrictions.get(0).getUpperBound() == null && !restrictions.get(0).isUpperBoundInclusive();
}
public String getLowerBoundString()
{
return restrictions.size() == 1 ? restrictions.get(0).getLowerBound().getVersionString() : "";
}
}
@@ -1,23 +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 ArgsWrapper
{
public ArgsWrapper(String[] args)
{
this.args=args;
}
public String[] args;
}
@@ -37,11 +37,13 @@ import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.logging.Level;
import net.minecraft.launchwrapper.LaunchClassLoader;
import cpw.mods.fml.common.CertificateHelper;
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion;
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions;
public class RelaunchLibraryManager
public class CoreModManager
{
private static String[] rootPlugins = { "cpw.mods.fml.relauncher.FMLCorePlugin" , "net.minecraftforge.classloading.FMLForgePlugin" };
private static List<String> loadedLibraries = new ArrayList<String>();
@@ -50,12 +52,12 @@ public class RelaunchLibraryManager
private static List<ILibrarySet> libraries;
private static boolean deobfuscatedEnvironment;
public static void handleLaunch(File mcDir, RelaunchClassLoader actualClassLoader)
public static void handleLaunch(File mcDir, LaunchClassLoader classLoader)
{
try
{
// Are we in a 'decompiled' environment?
byte[] bs = actualClassLoader.getClassBytes("net.minecraft.world.World");
byte[] bs = classLoader.getClassBytes("net.minecraft.world.World");
if (bs != null)
{
FMLRelaunchLog.info("Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation");
@@ -72,17 +74,13 @@ public class RelaunchLibraryManager
}
pluginLocations = new HashMap<IFMLLoadingPlugin, File>();
loadPlugins = new ArrayList<IFMLLoadingPlugin>();
libraries = new ArrayList<ILibrarySet>();
for (String s : rootPlugins)
{
try
{
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) Class.forName(s, true, actualClassLoader).newInstance();
FMLRelaunchLog.finest("Adding coremod for loading %s", s);
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) Class.forName(s, true, classLoader).newInstance();
loadPlugins.add(plugin);
for (String libName : plugin.getLibraryRequestClass())
{
libraries.add((ILibrarySet) Class.forName(libName, true, actualClassLoader).newInstance());
}
}
catch (Exception e)
{
@@ -107,14 +105,14 @@ public class RelaunchLibraryManager
FMLRelaunchLog.info("Found a command line coremod : %s", s);
try
{
actualClassLoader.addTransformerExclusion(s);
Class<?> coreModClass = Class.forName(s, true, actualClassLoader);
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())
{
actualClassLoader.addTransformerExclusion(st);
classLoader.addTransformerExclusion(st);
}
}
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) coreModClass.newInstance();
@@ -123,7 +121,7 @@ public class RelaunchLibraryManager
{
for (String libName : plugin.getLibraryRequestClass())
{
libraries.add((ILibrarySet) Class.forName(libName, true, actualClassLoader).newInstance());
libraries.add((ILibrarySet) Class.forName(libName, true, classLoader).newInstance());
}
}
}
@@ -133,7 +131,7 @@ public class RelaunchLibraryManager
throw new RuntimeException(e);
}
}
discoverCoreMods(mcDir, actualClassLoader, loadPlugins, libraries);
discoverCoreMods(mcDir, classLoader, loadPlugins, libraries);
List<Throwable> caughtErrors = new ArrayList<Throwable>();
try
@@ -149,6 +147,7 @@ public class RelaunchLibraryManager
return;
}
libraries = new ArrayList<ILibrarySet>();
for (ILibrarySet lib : libraries)
{
for (int i=0; i<lib.getLibraries().length; i++)
@@ -213,7 +212,7 @@ public class RelaunchLibraryManager
try
{
actualClassLoader.addURL(libFile.toURI().toURL());
classLoader.addURL(libFile.toURI().toURL());
loadedLibraries.add(libName);
}
catch (MalformedURLException e)
@@ -268,14 +267,15 @@ public class RelaunchLibraryManager
{
for (String xformClass : plug.getASMTransformerClass())
{
actualClassLoader.registerTransformer(xformClass);
FMLRelaunchLog.finest("Registering transformer %s", xformClass);
classLoader.registerTransformer(xformClass);
}
}
}
// Deobfuscation transformer, always last
if (!deobfuscatedEnvironment)
{
actualClassLoader.registerTransformer("cpw.mods.fml.common.asm.transformers.DeobfuscationTransformer");
classLoader.registerTransformer("cpw.mods.fml.common.asm.transformers.DeobfuscationTransformer");
}
downloadMonitor.updateProgressString("Running coremod plugins");
Map<String,Object> data = new HashMap<String,Object>();
@@ -292,10 +292,10 @@ public class RelaunchLibraryManager
{
try
{
IFMLCallHook call = (IFMLCallHook) Class.forName(setupClass, true, actualClassLoader).newInstance();
IFMLCallHook call = (IFMLCallHook) Class.forName(setupClass, true, classLoader).newInstance();
Map<String,Object> callData = new HashMap<String, Object>();
callData.put("mcLocation", mcDir);
callData.put("classLoader", actualClassLoader);
callData.put("classLoader", classLoader);
callData.put("coremodLocation", pluginLocations.get(plugin));
callData.put("deobfuscationFileName", FMLInjectionData.debfuscationDataName());
call.injectData(callData);
@@ -317,7 +317,7 @@ public class RelaunchLibraryManager
try
{
downloadMonitor.updateProgressString("Validating minecraft");
Class<?> loaderClazz = Class.forName("cpw.mods.fml.common.Loader", true, actualClassLoader);
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");
@@ -333,7 +333,7 @@ public class RelaunchLibraryManager
}
}
private static void discoverCoreMods(File mcDir, RelaunchClassLoader classLoader, List<IFMLLoadingPlugin> loadPlugins, List<ILibrarySet> libraries)
private static void discoverCoreMods(File mcDir, LaunchClassLoader classLoader, List<IFMLLoadingPlugin> loadPlugins, List<ILibrarySet> libraries)
{
downloadMonitor.updateProgressString("Discovering coremods");
File coreMods = setupCoreModDir(mcDir);
@@ -5,13 +5,15 @@
* 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
{
@@ -46,8 +48,7 @@ public class DummyDownloader implements IDownloadDisplay
@Override
public void updateProgressString(String string, Object... data)
{
// TODO Auto-generated method stub
FMLRelaunchLog.log(Level.FINE, string, data);
}
@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
*/
@@ -26,6 +26,7 @@ public class FMLCorePlugin implements IFMLLoadingPlugin
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",
@@ -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
*/
@@ -20,6 +20,8 @@ import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import net.minecraft.launchwrapper.LaunchClassLoader;
public class FMLInjectionData
{
static File minecraftHome;
@@ -33,7 +35,7 @@ public class FMLInjectionData
public static List<String> containers = new ArrayList<String>();
static void build(File mcHome, RelaunchClassLoader classLoader)
static void build(File mcHome, LaunchClassLoader classLoader)
{
minecraftHome = mcHome;
InputStream stream = classLoader.getResourceAsStream("fmlversion.properties");
@@ -62,7 +64,7 @@ public class FMLInjectionData
static String debfuscationDataName()
{
return "deobfuscation_data_"+mccversion+".zip";
return "/deobfuscation_data-"+mccversion+".lzma";
}
public static Object[] data()
{
@@ -0,0 +1,118 @@
/*
* 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.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 com.google.common.base.Throwables;
import cpw.mods.fml.common.launcher.FMLTweaker;
import net.minecraft.launchwrapper.LaunchClassLoader;
public class FMLLaunchHandler
{
private static FMLLaunchHandler INSTANCE;
static Side side;
private LaunchClassLoader classLoader;
private FMLTweaker tweaker;
private File minecraftHome;
public static void configureForClientLaunch(LaunchClassLoader loader, FMLTweaker tweaker)
{
instance(loader, tweaker).setupClient();
}
public static void configureForServerLaunch(LaunchClassLoader loader, FMLTweaker tweaker)
{
instance(loader, tweaker).setupServer();
}
private static FMLLaunchHandler instance(LaunchClassLoader launchLoader, FMLTweaker tweaker)
{
if (INSTANCE == null)
{
INSTANCE = new FMLLaunchHandler(launchLoader, tweaker);
}
return INSTANCE;
}
private FMLLaunchHandler(LaunchClassLoader launchLoader, FMLTweaker tweaker)
{
this.classLoader = launchLoader;
this.tweaker = tweaker;
this.minecraftHome = tweaker.getGameDir();
this.classLoader.addClassLoaderExclusion("cpw.mods.fml.relauncher.");
this.classLoader.addClassLoaderExclusion("net.minecraftforge.classloading.");
this.classLoader.addTransformerExclusion("cpw.mods.fml.common.asm.transformers.deobf.");
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();
}
private void setupServer()
{
showWindow(false);
FMLRelaunchLog.logFileNamePattern = "ForgeModLoader-server-%g.log";
side = Side.SERVER;
setupHome();
}
private void setupHome()
{
FMLInjectionData.build(minecraftHome, classLoader);
FMLRelaunchLog.minecraftHome = minecraftHome;
FMLRelaunchLog.info("Forge Mod Loader version %s.%s.%s.%s for Minecraft %s loading", FMLInjectionData.major, FMLInjectionData.minor,
FMLInjectionData.rev, FMLInjectionData.build, FMLInjectionData.mccversion, FMLInjectionData.mcpversion);
FMLRelaunchLog.info("Java is %s, version %s, running on %s:%s:%s, installed at %s", System.getProperty("java.vm.name"), System.getProperty("java.version"), System.getProperty("os.name"), System.getProperty("os.arch"), System.getProperty("os.version"), System.getProperty("java.home"));
FMLRelaunchLog.fine("Java classpath at launch is %s", System.getProperty("java.class.path"));
FMLRelaunchLog.fine("Java library path at launch is %s", System.getProperty("java.library.path"));
try
{
CoreModManager.handleLaunch(minecraftHome, classLoader);
}
catch (Throwable t)
{
t.printStackTrace();
FMLRelaunchLog.log(Level.SEVERE, t, "An error occurred trying to configure the minecraft home at %s for Forge Mod Loader", minecraftHome.getAbsolutePath());
throw Throwables.propagate(t);
}
}
public static Side side()
{
return side;
}
}
@@ -28,6 +28,10 @@ import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import net.minecraft.launchwrapper.LogWrapper;
import com.google.common.base.Throwables;
public class FMLRelaunchLog
{
@@ -113,7 +117,7 @@ public class FMLRelaunchLog
// Are we longer than just the line separator?
int lastIdx = -1;
int idx = currentMessage.indexOf("\n",lastIdx+1);
while (idx > 0)
while (idx >= 0)
{
log.log(Level.INFO, currentMessage.substring(lastIdx+1,idx));
lastIdx = idx;
@@ -121,7 +125,9 @@ public class FMLRelaunchLog
}
if (lastIdx >= 0)
{
String rem = currentMessage.substring(lastIdx+1);
currentMessage.setLength(0);
currentMessage.append(rem);
}
}
}
@@ -144,6 +150,8 @@ public class FMLRelaunchLog
private static FMLLogFormatter formatter;
static String logFileNamePattern;
private FMLRelaunchLog()
{
}
@@ -157,6 +165,7 @@ public class FMLRelaunchLog
globalLogger.setLevel(Level.OFF);
log.myLog = Logger.getLogger("ForgeModLoader");
LogWrapper.retarget(log.myLog);
Logger stdOut = Logger.getLogger("STDOUT");
stdOut.setParent(log.myLog);
@@ -170,7 +179,7 @@ public class FMLRelaunchLog
formatter = new FMLLogFormatter();
try
{
File logPath = new File(minecraftHome, FMLRelauncher.logFileNamePattern);
File logPath = new File(minecraftHome, logFileNamePattern);
fileHandler = new FileHandler(logPath.getPath(), 0, 3)
{
public synchronized void close() throws SecurityException {
@@ -178,8 +187,9 @@ public class FMLRelaunchLog
}
};
}
catch (Exception e)
catch (Throwable t)
{
throw Throwables.propagate(t);
}
resetLoggingHandlers();
@@ -1,335 +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.applet.Applet;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URLClassLoader;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
public class FMLRelauncher
{
private static FMLRelauncher INSTANCE;
public static String logFileNamePattern;
private static String side;
private RelaunchClassLoader classLoader;
private Object newApplet;
private Class<? super Object> appletClass;
JDialog popupWindow;
public static void handleClientRelaunch(ArgsWrapper wrap)
{
logFileNamePattern = "ForgeModLoader-client-%g.log";
side = "CLIENT";
instance().relaunchClient(wrap);
}
public static void handleServerRelaunch(ArgsWrapper wrap)
{
logFileNamePattern = "ForgeModLoader-server-%g.log";
side = "SERVER";
instance().relaunchServer(wrap);
}
static FMLRelauncher instance()
{
if (INSTANCE == null)
{
INSTANCE = new FMLRelauncher();
}
return INSTANCE;
}
private FMLRelauncher()
{
URLClassLoader ucl = (URLClassLoader) getClass().getClassLoader();
classLoader = new RelaunchClassLoader(ucl.getURLs());
}
private void showWindow(boolean showIt)
{
if (RelaunchLibraryManager.downloadMonitor != null) { return; }
try
{
if (showIt)
{
RelaunchLibraryManager.downloadMonitor = new Downloader();
popupWindow = (JDialog) RelaunchLibraryManager.downloadMonitor.makeDialog();
}
else
{
RelaunchLibraryManager.downloadMonitor = new DummyDownloader();
}
}
catch (Throwable e)
{
if (RelaunchLibraryManager.downloadMonitor == null)
{
RelaunchLibraryManager.downloadMonitor = new DummyDownloader();
e.printStackTrace();
}
else
{
RelaunchLibraryManager.downloadMonitor.makeHeadless();
}
popupWindow = null;
}
}
private void relaunchClient(ArgsWrapper wrap)
{
showWindow(true);
// Now we re-inject the home into the "new" minecraft under our control
Class<? super Object> client;
try
{
File minecraftHome = computeExistingClientHome();
setupHome(minecraftHome);
client = setupNewClientHome(minecraftHome);
}
finally
{
if (popupWindow != null)
{
popupWindow.setVisible(false);
popupWindow.dispose();
}
}
if (RelaunchLibraryManager.downloadMonitor.shouldStopIt())
{
System.exit(1);
}
try
{
ReflectionHelper.findMethod(client, null, new String[] { "fmlReentry" }, ArgsWrapper.class).invoke(null, wrap);
}
catch (Exception e)
{
e.printStackTrace();
// Hmmm
}
}
private Class<? super Object> setupNewClientHome(File minecraftHome)
{
Class<? super Object> client = ReflectionHelper.getClass(classLoader, "net.minecraft.client.Minecraft");
ReflectionHelper.setPrivateValue(client, null, minecraftHome,
"field_" + "71463_am" /*Separate that so that MCP's updatenames does not replace it*/,
"an", "minecraftDir");
return client;
}
private void relaunchServer(ArgsWrapper wrap)
{
showWindow(false);
// Now we re-inject the home into the "new" minecraft under our control
Class<? super Object> server;
File minecraftHome = new File(".");
setupHome(minecraftHome);
server = ReflectionHelper.getClass(classLoader, "net.minecraft.server.MinecraftServer");
try
{
ReflectionHelper.findMethod(server, null, new String[] { "fmlReentry" }, ArgsWrapper.class).invoke(null, wrap);
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void setupHome(File minecraftHome)
{
FMLInjectionData.build(minecraftHome, classLoader);
FMLRelaunchLog.minecraftHome = minecraftHome;
FMLRelaunchLog.info("Forge Mod Loader version %s.%s.%s.%s for Minecraft %s loading", FMLInjectionData.major, FMLInjectionData.minor,
FMLInjectionData.rev, FMLInjectionData.build, FMLInjectionData.mccversion, FMLInjectionData.mcpversion);
FMLRelaunchLog.info("Java is %s, version %s, running on %s:%s:%s, installed at %s", System.getProperty("java.vm.name"), System.getProperty("java.version"), System.getProperty("os.name"), System.getProperty("os.arch"), System.getProperty("os.version"), System.getProperty("java.home"));
FMLRelaunchLog.fine("Java classpath at launch is %s", System.getProperty("java.class.path"));
FMLRelaunchLog.fine("Java library path at launch is %s", System.getProperty("java.library.path"));
try
{
RelaunchLibraryManager.handleLaunch(minecraftHome, classLoader);
}
catch (Throwable t)
{
if (popupWindow != null)
{
try
{
String logFile = new File(minecraftHome, "ForgeModLoader-client-0.log").getCanonicalPath();
JOptionPane.showMessageDialog(popupWindow, String.format(
"<html><div align=\"center\"><font size=\"+1\">There was a fatal error starting up minecraft and FML</font></div><br/>"
+ "Minecraft cannot launch in it's current configuration<br/>"
+ "Please consult the file <i><a href=\"file:///%s\">%s</a></i> for further information</html>", logFile, logFile),
"Fatal FML error", JOptionPane.ERROR_MESSAGE);
}
catch (Exception ex)
{
// ah well, we tried
}
}
throw new RuntimeException(t);
}
}
/**
* @return the location of the client home
*/
private File computeExistingClientHome()
{
Class<? super Object> mcMaster = ReflectionHelper.getClass(getClass().getClassLoader(), "net.minecraft.client.Minecraft");
// If we get the system property we inject into the old MC, setup the
// dir, then pull the value
String str = System.getProperty("minecraft.applet.TargetDirectory");
if (str != null)
{
str = str.replace('/', File.separatorChar);
ReflectionHelper.setPrivateValue(mcMaster, null, new File(str), "minecraftDir", "an", "minecraftDir");
}
// We force minecraft to setup it's homedir very early on so we can
// inject stuff into it
Method setupHome = ReflectionHelper.findMethod(mcMaster, null, new String[] { "func_71380_b", "getMinecraftDir", "b" });
try
{
setupHome.invoke(null);
}
catch (Exception e)
{
// Hmmm
}
File minecraftHome = ReflectionHelper.getPrivateValue(mcMaster, null, "field_71463_am", "an", "minecraftDir");
return minecraftHome;
}
public static void appletEntry(Applet minecraftApplet)
{
side = "CLIENT";
logFileNamePattern = "ForgeModLoader-client-%g.log";
instance().relaunchApplet(minecraftApplet);
}
private void relaunchApplet(Applet minecraftApplet)
{
showWindow(true);
if (minecraftApplet.getClass().getClassLoader() == classLoader)
{
if (popupWindow != null)
{
popupWindow.setVisible(false);
popupWindow.dispose();
}
try
{
newApplet = minecraftApplet;
appletClass = ReflectionHelper.getClass(classLoader, "net.minecraft.client.MinecraftApplet");
ReflectionHelper.findMethod(appletClass, newApplet, new String[] { "fmlInitReentry" }).invoke(newApplet);
return;
}
catch (Exception e)
{
System.out.println("FMLRelauncher.relaunchApplet");
e.printStackTrace();
throw new RuntimeException(e);
}
}
File mcDir = computeExistingClientHome();
setupHome(mcDir);
setupNewClientHome(mcDir);
Class<? super Object> parentAppletClass = ReflectionHelper.getClass(getClass().getClassLoader(), "java.applet.Applet");
try
{
appletClass = ReflectionHelper.getClass(classLoader, "net.minecraft.client.MinecraftApplet");
newApplet = appletClass.newInstance();
Object appletContainer = ReflectionHelper.getPrivateValue(ReflectionHelper.getClass(getClass().getClassLoader(), "java.awt.Component"),
minecraftApplet, "parent");
String launcherClassName = System.getProperty("minecraft.applet.WrapperClass", "net.minecraft.Launcher");
Class<? super Object> launcherClass = ReflectionHelper.getClass(getClass().getClassLoader(), launcherClassName);
if (launcherClass.isInstance(appletContainer))
{
ReflectionHelper.findMethod(ReflectionHelper.getClass(getClass().getClassLoader(), "java.awt.Container"), minecraftApplet,
new String[] { "removeAll" }).invoke(appletContainer);
ReflectionHelper.findMethod(launcherClass, appletContainer, new String[] { "replace" }, parentAppletClass).invoke(appletContainer, newApplet);
}
else
{
FMLRelaunchLog.severe("Found unknown applet parent %s, unable to inject!\n", appletContainer.getClass().getName());
throw new RuntimeException();
}
}
catch (Exception e)
{
throw new RuntimeException(e);
}
finally
{
if (popupWindow != null)
{
popupWindow.setVisible(false);
popupWindow.dispose();
}
}
}
public static void appletStart(Applet applet)
{
instance().startApplet(applet);
}
private void startApplet(Applet applet)
{
if (applet.getClass().getClassLoader() == classLoader)
{
if (popupWindow != null)
{
popupWindow.setVisible(false);
popupWindow.dispose();
}
if (RelaunchLibraryManager.downloadMonitor.shouldStopIt())
{
System.exit(1);
}
try
{
ReflectionHelper.findMethod(appletClass, newApplet, new String[] { "fmlStartReentry" }).invoke(newApplet);
}
catch (Exception e)
{
System.out.println("FMLRelauncher.startApplet");
e.printStackTrace();
throw new RuntimeException(e);
}
}
return;
}
public static String side()
{
return side;
}
}
@@ -1,19 +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 interface IClassNameTransformer {
public String remapClassName(String name);
public String unmapClassName(String name);
}
@@ -1,18 +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 interface IClassTransformer
{
public byte[] transform(String name, String transformedName, byte[] bytes);
}
@@ -32,6 +32,7 @@ public interface IFMLLoadingPlugin
*
* @return a list of classes that implement the ILibrarySet interface
*/
@Deprecated
String[] getLibraryRequestClass();
/**
* Return a list of classes that implements the IClassTransformer interface
@@ -1,411 +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.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLConnection;
import java.security.CodeSigner;
import java.security.CodeSource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.jar.Attributes.Name;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
import java.util.logging.Level;
import cpw.mods.fml.common.FMLLog;
public class RelaunchClassLoader extends URLClassLoader
{
private List<URL> sources;
private ClassLoader parent;
private List<IClassTransformer> transformers;
private Map<String, Class> cachedClasses;
private Set<String> invalidClasses;
private Set<String> classLoaderExceptions = new HashSet<String>();
private Set<String> transformerExceptions = new HashSet<String>();
private Map<Package,Manifest> packageManifests = new HashMap<Package,Manifest>();
private IClassNameTransformer renameTransformer;
private static Manifest EMPTY = new Manifest();
private ThreadLocal<byte[]> loadBuffer = new ThreadLocal<byte[]>();
private static final String[] RESERVED = {"CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"};
private static final boolean DEBUG_CLASSLOADING = Boolean.parseBoolean(System.getProperty("fml.debugClassLoading", "false"));
private static final boolean DEBUG_CLASSLOADING_FINER = DEBUG_CLASSLOADING && Boolean.parseBoolean(System.getProperty("fml.debugClassLoadingFiner", "false"));
public RelaunchClassLoader(URL[] sources)
{
super(sources, null);
this.sources = new ArrayList<URL>(Arrays.asList(sources));
this.parent = getClass().getClassLoader();
this.cachedClasses = new HashMap<String,Class>(1000);
this.invalidClasses = new HashSet<String>(1000);
this.transformers = new ArrayList<IClassTransformer>(2);
// ReflectionHelper.setPrivateValue(ClassLoader.class, null, this, "scl");
Thread.currentThread().setContextClassLoader(this);
// standard classloader exclusions
addClassLoaderExclusion("java.");
addClassLoaderExclusion("sun.");
addClassLoaderExclusion("org.lwjgl.");
addClassLoaderExclusion("cpw.mods.fml.relauncher.");
addClassLoaderExclusion("net.minecraftforge.classloading.");
// standard transformer exclusions
addTransformerExclusion("javax.");
addTransformerExclusion("argo.");
addTransformerExclusion("org.objectweb.asm.");
addTransformerExclusion("com.google.common.");
addTransformerExclusion("org.bouncycastle.");
addTransformerExclusion("cpw.mods.fml.common.asm.transformers.deobf.");
}
public void registerTransformer(String transformerClassName)
{
try
{
IClassTransformer transformer = (IClassTransformer) loadClass(transformerClassName).newInstance();
transformers.add(transformer);
if (transformer instanceof IClassNameTransformer && renameTransformer == null)
{
renameTransformer = (IClassNameTransformer) transformer;
}
}
catch (Exception e)
{
FMLRelaunchLog.log(Level.SEVERE, e, "A critical problem occured registering the ASM transformer class %s", transformerClassName);
}
}
@Override
public Class<?> findClass(String name) throws ClassNotFoundException
{
if (invalidClasses.contains(name))
{
throw new ClassNotFoundException(name);
}
for (String st : classLoaderExceptions)
{
if (name.startsWith(st))
{
return parent.loadClass(name);
}
}
if (cachedClasses.containsKey(name))
{
return cachedClasses.get(name);
}
for (String st : transformerExceptions)
{
if (name.startsWith(st))
{
try
{
Class<?> cl = super.findClass(name);
cachedClasses.put(name, cl);
return cl;
}
catch (ClassNotFoundException e)
{
invalidClasses.add(name);
throw e;
}
}
}
try
{
CodeSigner[] signers = null;
String transformedName = transformName(name);
String untransformedName = untransformName(name);
int lastDot = untransformedName.lastIndexOf('.');
String pkgname = lastDot == -1 ? "" : untransformedName.substring(0, lastDot);
String fName = untransformedName.replace('.', '/').concat(".class");
String pkgPath = pkgname.replace('.', '/');
URLConnection urlConnection = findCodeSourceConnectionFor(fName);
if (urlConnection instanceof JarURLConnection && lastDot > -1 && !untransformedName.startsWith("net.minecraft."))
{
JarURLConnection jarUrlConn = (JarURLConnection)urlConnection;
JarFile jf = jarUrlConn.getJarFile();
if (jf != null && jf.getManifest() != null)
{
Manifest mf = jf.getManifest();
JarEntry ent = jf.getJarEntry(fName);
Package pkg = getPackage(pkgname);
getClassBytes(untransformedName);
signers = ent.getCodeSigners();
if (pkg == null)
{
pkg = definePackage(pkgname, mf, jarUrlConn.getJarFileURL());
packageManifests.put(pkg, mf);
}
else
{
if (pkg.isSealed() && !pkg.isSealed(jarUrlConn.getJarFileURL()))
{
FMLLog.severe("The jar file %s is trying to seal already secured path %s", jf.getName(), pkgname);
}
else if (isSealed(pkgname, mf))
{
FMLLog.severe("The jar file %s has a security seal for path %s, but that path is defined and not secure", jf.getName(), pkgname);
}
}
}
}
else if (lastDot > -1 && !untransformedName.startsWith("net.minecraft."))
{
Package pkg = getPackage(pkgname);
if (pkg == null)
{
pkg = definePackage(pkgname, null, null, null, null, null, null, null);
packageManifests.put(pkg, EMPTY);
}
else if (pkg.isSealed())
{
FMLLog.severe("The URL %s is defining elements for sealed path %s", urlConnection.getURL(), pkgname);
}
}
byte[] basicClass = getClassBytes(untransformedName);
byte[] transformedClass = runTransformers(untransformedName, transformedName, basicClass);
Class<?> cl = defineClass(transformedName, transformedClass, 0, transformedClass.length, (urlConnection == null ? null : new CodeSource(urlConnection.getURL(), signers)));
cachedClasses.put(transformedName, cl);
return cl;
}
catch (Throwable e)
{
invalidClasses.add(name);
if (DEBUG_CLASSLOADING)
{
FMLLog.log(Level.FINEST, e, "Exception encountered attempting classloading of %s", name);
}
throw new ClassNotFoundException(name, e);
}
}
private String untransformName(String name)
{
if (renameTransformer != null)
{
return renameTransformer.unmapClassName(name);
}
else
{
return name;
}
}
private String transformName(String name)
{
if (renameTransformer != null)
{
return renameTransformer.remapClassName(name);
}
else
{
return name;
}
}
private boolean isSealed(String path, Manifest man)
{
Attributes attr = man.getAttributes(path);
String sealed = null;
if (attr != null) {
sealed = attr.getValue(Name.SEALED);
}
if (sealed == null) {
if ((attr = man.getMainAttributes()) != null) {
sealed = attr.getValue(Name.SEALED);
}
}
return "true".equalsIgnoreCase(sealed);
}
private URLConnection findCodeSourceConnectionFor(String name)
{
URL res = findResource(name);
if (res != null)
{
try
{
return res.openConnection();
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
else
{
return null;
}
}
private byte[] runTransformers(String name, String transformedName, byte[] basicClass)
{
if (DEBUG_CLASSLOADING_FINER)
{
FMLRelaunchLog.finest("Beginning transform of %s (%s) Start Length: %d", name, transformedName, (basicClass == null ? 0 : basicClass.length));
for (IClassTransformer transformer : transformers)
{
String transName = transformer.getClass().getName();
FMLRelaunchLog.finest("Before Transformer %s: %d", transName, (basicClass == null ? 0 : basicClass.length));
basicClass = transformer.transform(name, transformedName, basicClass);
FMLRelaunchLog.finest("After Transformer %s: %d", transName, (basicClass == null ? 0 : basicClass.length));
}
FMLRelaunchLog.finest("Ending transform of %s (%s) Start Length: %d", name, transformedName, (basicClass == null ? 0 : basicClass.length));
}
else
{
for (IClassTransformer transformer : transformers)
{
basicClass = transformer.transform(name, transformedName, basicClass);
}
}
return basicClass;
}
@Override
public void addURL(URL url)
{
super.addURL(url);
sources.add(url);
}
public List<URL> getSources()
{
return sources;
}
private byte[] readFully(InputStream stream)
{
try
{
byte[] buf = loadBuffer.get();
if (buf == null)
{
loadBuffer.set(new byte[1 << 12]);
buf = loadBuffer.get();
}
int r, totalLength = 0;
while ((r = stream.read(buf, totalLength, buf.length - totalLength)) != -1)
{
totalLength += r;
if (totalLength >= buf.length - 1)
{
byte[] oldbuf = buf;
buf = new byte[ oldbuf.length + (1 << 12 )];
System.arraycopy(oldbuf, 0, buf, 0, oldbuf.length);
}
}
byte[] result = new byte[totalLength];
System.arraycopy(buf, 0, result, 0, totalLength);
return result;
}
catch (Throwable t)
{
FMLRelaunchLog.log(Level.WARNING, t, "Problem loading class");
return new byte[0];
}
}
public List<IClassTransformer> getTransformers()
{
return Collections.unmodifiableList(transformers);
}
private void addClassLoaderExclusion(String toExclude)
{
classLoaderExceptions.add(toExclude);
}
void addTransformerExclusion(String toExclude)
{
transformerExceptions.add(toExclude);
}
public byte[] getClassBytes(String name) throws IOException
{
if (name.indexOf('.') == -1)
{
for (String res : RESERVED)
{
if (name.toUpperCase(Locale.ENGLISH).startsWith(res))
{
byte[] data = getClassBytes("_" + name);
if (data != null)
{
return data;
}
}
}
}
InputStream classStream = null;
try
{
URL classResource = findResource(name.replace('.', '/').concat(".class"));
if (classResource == null)
{
if (DEBUG_CLASSLOADING)
{
FMLLog.finest("Failed to find class resource %s", name.replace('.', '/').concat(".class"));
}
return null;
}
classStream = classResource.openStream();
if (DEBUG_CLASSLOADING)
{
FMLLog.finest("Loading class %s from resource %s", name, classResource.toString());
}
return readFully(classStream);
}
finally
{
if (classStream != null)
{
try
{
classStream.close();
}
catch (IOException e)
{
// Swallow the close exception
}
}
}
}
}
@@ -0,0 +1,32 @@
package cpw.mods.fml.relauncher;
import java.io.File;
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 {
/**
* @param args
*/
public static void main(String[] args)
{
new ServerLaunchWrapper().run(args);
}
private ServerLaunchWrapper()
{
}
private void run(String[] args)
{
Launch.main(args);
}
}
+2 -2
View File
@@ -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
*/
@@ -13,7 +13,7 @@
package cpw.mods.fml.relauncher;
public enum Side {
CLIENT, SERVER, BUKKIT;
CLIENT, SERVER;
/**
* @return If this is the server environment
+16 -1
View File
@@ -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
*/
@@ -17,7 +17,22 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import cpw.mods.fml.common.SidedProxy;
/**
* Marks the associated element as being only available on a certain {@link Side}. This is
* generally meant for internal Forge and FML use only and should only be used on mod classes
* when other more common mechanisms, such as using a {@link SidedProxy} fail to work.
*
* Note, this will <em>only</em> apply to the direct element marked. This code:
* <code> @SideOnly public MyField field = new MyField();</code> will <strong>not</strong> work, as the initializer
* is a separate piece of code to the actual field declaration, and will not be able to find
* it's field on the wrong side.
*
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR})
public @interface SideOnly
@@ -0,0 +1,97 @@
/*
* ByteArraySeekableSource.java
*
* Created on May 17, 2006, 12:41 PM
* Copyright (c) 2006 Heiko Klein
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
*/
package cpw.mods.fml.repackage.com.nothome.delta;
import java.io.IOException;
import java.nio.ByteBuffer;
/**
* Wraps a byte buffer as a source
*/
public class ByteBufferSeekableSource implements SeekableSource {
private ByteBuffer bb;
private ByteBuffer cur;
/**
* Constructs a new ByteArraySeekableSource.
*/
public ByteBufferSeekableSource(byte[] source) {
this(ByteBuffer.wrap(source));
}
/**
* Constructs a new ByteArraySeekableSource.
*/
public ByteBufferSeekableSource(ByteBuffer bb) {
if (bb == null)
throw new NullPointerException("bb");
this.bb = bb;
bb.rewind();
try {
seek(0);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void seek(long pos) throws IOException {
cur = bb.slice();
if (pos > cur.limit())
throw new IOException("pos " + pos + " cannot seek " + cur.limit());
cur.position((int) pos);
}
public int read(ByteBuffer dest) throws IOException {
if (!cur.hasRemaining())
return -1;
int c = 0;
while (cur.hasRemaining() && dest.hasRemaining()) {
dest.put(cur.get());
c++;
}
return c;
}
public void close() throws IOException {
bb = null;
cur = null;
}
/**
* Returns a debug <code>String</code>.
*/
@Override
public String toString()
{
return "BBSeekable" +
" bb=" + this.bb.position() + "-" + bb.limit() +
" cur=" + this.cur.position() + "-" + cur.limit() +
"";
}
}
@@ -0,0 +1,162 @@
/*
*
* Copyright (c) 2001 Torgeir Veimo
* Copyright (c) 2002 Nicolas PERIDONT
* Copyright (c) 2006 Heiko Klein
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
package cpw.mods.fml.repackage.com.nothome.delta;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Map;
import com.google.common.collect.Maps;
/**
* Checksum computation class.
*/
public class Checksum {
static final boolean debug = false;
private Map<Long,Integer> checksums = Maps.newHashMap();
private static final char single_hash[] = {
/* Random numbers generated using SLIB's pseudo-random number generator. */
0xbcd1, 0xbb65, 0x42c2, 0xdffe, 0x9666, 0x431b, 0x8504, 0xeb46,
0x6379, 0xd460, 0xcf14, 0x53cf, 0xdb51, 0xdb08, 0x12c8, 0xf602,
0xe766, 0x2394, 0x250d, 0xdcbb, 0xa678, 0x02af, 0xa5c6, 0x7ea6,
0xb645, 0xcb4d, 0xc44b, 0xe5dc, 0x9fe6, 0x5b5c, 0x35f5, 0x701a,
0x220f, 0x6c38, 0x1a56, 0x4ca3, 0xffc6, 0xb152, 0x8d61, 0x7a58,
0x9025, 0x8b3d, 0xbf0f, 0x95a3, 0xe5f4, 0xc127, 0x3bed, 0x320b,
0xb7f3, 0x6054, 0x333c, 0xd383, 0x8154, 0x5242, 0x4e0d, 0x0a94,
0x7028, 0x8689, 0x3a22, 0x0980, 0x1847, 0xb0f1, 0x9b5c, 0x4176,
0xb858, 0xd542, 0x1f6c, 0x2497, 0x6a5a, 0x9fa9, 0x8c5a, 0x7743,
0xa8a9, 0x9a02, 0x4918, 0x438c, 0xc388, 0x9e2b, 0x4cad, 0x01b6,
0xab19, 0xf777, 0x365f, 0x1eb2, 0x091e, 0x7bf8, 0x7a8e, 0x5227,
0xeab1, 0x2074, 0x4523, 0xe781, 0x01a3, 0x163d, 0x3b2e, 0x287d,
0x5e7f, 0xa063, 0xb134, 0x8fae, 0x5e8e, 0xb7b7, 0x4548, 0x1f5a,
0xfa56, 0x7a24, 0x900f, 0x42dc, 0xcc69, 0x02a0, 0x0b22, 0xdb31,
0x71fe, 0x0c7d, 0x1732, 0x1159, 0xcb09, 0xe1d2, 0x1351, 0x52e9,
0xf536, 0x5a4f, 0xc316, 0x6bf9, 0x8994, 0xb774, 0x5f3e, 0xf6d6,
0x3a61, 0xf82c, 0xcc22, 0x9d06, 0x299c, 0x09e5, 0x1eec, 0x514f,
0x8d53, 0xa650, 0x5c6e, 0xc577, 0x7958, 0x71ac, 0x8916, 0x9b4f,
0x2c09, 0x5211, 0xf6d8, 0xcaaa, 0xf7ef, 0x287f, 0x7a94, 0xab49,
0xfa2c, 0x7222, 0xe457, 0xd71a, 0x00c3, 0x1a76, 0xe98c, 0xc037,
0x8208, 0x5c2d, 0xdfda, 0xe5f5, 0x0b45, 0x15ce, 0x8a7e, 0xfcad,
0xaa2d, 0x4b5c, 0xd42e, 0xb251, 0x907e, 0x9a47, 0xc9a6, 0xd93f,
0x085e, 0x35ce, 0xa153, 0x7e7b, 0x9f0b, 0x25aa, 0x5d9f, 0xc04d,
0x8a0e, 0x2875, 0x4a1c, 0x295f, 0x1393, 0xf760, 0x9178, 0x0f5b,
0xfa7d, 0x83b4, 0x2082, 0x721d, 0x6462, 0x0368, 0x67e2, 0x8624,
0x194d, 0x22f6, 0x78fb, 0x6791, 0xb238, 0xb332, 0x7276, 0xf272,
0x47ec, 0x4504, 0xa961, 0x9fc8, 0x3fdc, 0xb413, 0x007a, 0x0806,
0x7458, 0x95c6, 0xccaa, 0x18d6, 0xe2ae, 0x1b06, 0xf3f6, 0x5050,
0xc8e8, 0xf4ac, 0xc04c, 0xf41c, 0x992f, 0xae44, 0x5f1b, 0x1113,
0x1738, 0xd9a8, 0x19ea, 0x2d33, 0x9698, 0x2fe9, 0x323f, 0xcde2,
0x6d71, 0xe37d, 0xb697, 0x2c4f, 0x4373, 0x9102, 0x075d, 0x8e25,
0x1672, 0xec28, 0x6acb, 0x86cc, 0x186e, 0x9414, 0xd674, 0xd1a5
};
/**
* Initialize checksums for source. The checksum for the <code>chunkSize</code> bytes at offset
* <code>chunkSize</code> * i is inserted into a hash map.
*/
public Checksum(SeekableSource source, int chunkSize) throws IOException {
ByteBuffer bb = ByteBuffer.allocate(chunkSize * 2);
int count = 0;
while (true) {
source.read(bb);
bb.flip();
if (bb.remaining() < chunkSize)
break;
while (bb.remaining() >= chunkSize) {
long queryChecksum = queryChecksum0(bb, chunkSize);
checksums.put(queryChecksum, count++);
}
bb.compact();
}
}
/**
* Finds the checksum computed from the buffer.
* Marks, gets, then resets the buffer.
*/
public static long queryChecksum(ByteBuffer bb, int len) {
bb.mark();
long sum = queryChecksum0(bb, len);
bb.reset();
return sum;
}
private static long queryChecksum0(ByteBuffer bb, int len) {
int high = 0; int low = 0;
for (int i = 0; i < len; i++) {
low += single_hash[bb.get()+128];
high += low;
}
return ((high & 0xffff) << 16) | (low & 0xffff);
}
/**
* Increments a checksum.
* @param checksum initial checksum
* @param out byte leaving view
* @param in byte entering view
* @param chunkSize size of chunks
* @return new checksum
*/
public static long incrementChecksum(long checksum, byte out, byte in, int chunkSize) {
char old_c = single_hash[out+128];
char new_c = single_hash[in+128];
int low = ((int)((checksum) & 0xffff) - old_c + new_c) & 0xffff;
int high = ((int)((checksum) >> 16) - (old_c * chunkSize) + low) & 0xffff;
return (high << 16) | (low & 0xffff);
}
/**
* 256 random hash values.
*/
public static char[] getSingleHash() {
return single_hash;
}
/**
* Finds the index of a checksum.
*/
public int findChecksumIndex(long hashf) {
if (!checksums.containsKey(hashf))
return -1;
return checksums.get(hashf);
}
/**
* Returns a debug <code>String</code>.
*/
@Override
public String toString()
{
return super.toString() +
" checksums=" + this.checksums;
}
}
@@ -0,0 +1,75 @@
/*
*
* Copyright (c) 2001 Torgeir Veimo
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
*/
package cpw.mods.fml.repackage.com.nothome.delta;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/**
* For debugging patch generation.
*/
public class DebugDiffWriter implements DiffWriter {
private ByteArrayOutputStream os = new ByteArrayOutputStream();
/**
* Constructs a new DebugDiffWriter.
*/
public DebugDiffWriter() {}
public void addCopy(long offset, int length) throws IOException {
if (os.size() > 0)
writeBuf();
System.err.println("COPY off: " + offset + ", len: " + length);
}
public void addData(byte b) throws IOException {
os.write(b);
writeBuf();
}
private void writeBuf() {
System.err.print("DATA: ");
byte[] ba = os.toByteArray();
for (int ix = 0; ix < ba.length; ix++) {
if (ba[ix] == '\n')
System.err.print("\\n");
else
System.err.print(String.valueOf((char)((char) ba[ix])));
//System.err.print("0x" + Integer.toHexString(buf[ix]) + " "); // hex output
}
System.err.println("");
os.reset();
}
public void flush() throws IOException {
System.err.println("FLUSH");
}
public void close() throws IOException {
System.err.println("CLOSE");
}
}
@@ -0,0 +1,446 @@
/*
*
* Copyright (c) 2001 Torgeir Veimo
* Copyright (c) 2002 Nicolas PERIDONT
* Bug Fixes: Daniel Morrione [email protected]
* Copyright (c) 2006 Heiko Klein
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
* Change Log:
* iiimmddyyn nnnnn Description
* ---------- ----- -------------------------------------------------------
* gls100603a Fixes from Torgeir Veimo and Dan Morrione
* gls110603a Stream not being closed thus preventing a file from
* being subsequently deleted.
* gls031504a Error being written to stderr rather than throwing exception
*/
package cpw.mods.fml.repackage.com.nothome.delta;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
/**
* Class for computing deltas against a source.
* The source file is read by blocks and a hash is computed per block.
* Then the target is scanned for matching blocks.
* <p/>
* This class is not thread safe. Use one instance per thread.
* <p/>
* This class should support files over 4GB in length, although you must
* use a larger checksum size, such as 1K, as all checksums use "int" indexing.
* 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.
* Any smaller and the patch size becomes actually be larger.
* <p>
* 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.
*/
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) {
if (size <= 0)
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),
new ByteArrayInputStream(target),
new GDiffWriter(output));
}
/**
* Compares the source bytes with target bytes, returning output.
*/
public byte[] compute(byte source[], byte target[])
throws IOException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
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),
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)
throws IOException {
RandomAccessFileSeekableSource source = new RandomAccessFileSeekableSource(new RandomAccessFile(sourceFile, "r"));
InputStream is = new BufferedInputStream(new FileInputStream(targetFile));
try {
compute(source, is, output);
} finally {
source.close();
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);
if (index != -1) {
if (debug)
debug("found hash " + index);
long offset = (long)index * S;
source.seek(offset);
int match = target.longestMatch(source);
if (match >= S) {
if (debug)
debug("output.addCopy("+offset+","+match+")");
output.addCopy(offset, match);
} else {
// move the position back according to how much we can't copy
target.tbuf.position(target.tbuf.position() - match);
addData();
}
} else {
addData();
}
}
output.close();
}
private void addData() throws IOException {
int i = target.read();
if (debug)
debug("addData " + Integer.toHexString(i));
if (i == -1)
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;
source.seek(0);
}
public void seek(long index) throws IOException {
source.seek(index);
}
/**
* Returns a debug <code>String</code>.
*/
@Override
public String toString()
{
return "Source"+
" checksum=" + this.checksum +
" 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);
}
/**
* Returns the index of the next N bytes of the stream.
*/
public int find(SourceState source) throws IOException {
if (eof)
return -1;
sbuf.clear();
sbuf.limit(0);
if (hashReset) {
debug("hashReset");
while (tbuf.remaining() < S) {
tbuf.compact();
int read = c.read(tbuf);
tbuf.flip();
if (read == -1) {
debug("target ending");
return -1;
}
}
hash = Checksum.queryChecksum(tbuf, S);
hashReset = false;
}
if (debug)
debug("hash " + hash + " " + dump());
return source.checksum.findChecksumIndex(hash);
}
public boolean eof() {
return eof;
}
/**
* Reads a byte.
* @throws IOException
*/
public int read() throws IOException {
if (tbuf.remaining() <= S) {
readMore();
if (!tbuf.hasRemaining()) {
eof = true;
return -1;
}
}
byte b = tbuf.get();
if (tbuf.remaining() >= S) {
byte nchar = tbuf.get( tbuf.position() + S -1 );
hash = Checksum.incrementChecksum(hash, b, nchar, S);
} else {
debug("out of char");
}
return b & 0xFF;
}
/**
* Returns the longest match length at the source location.
*/
public int longestMatch(SourceState source) throws IOException {
debug("longestMatch");
int match = 0;
hashReset = true;
while (true) {
if (!sbuf.hasRemaining()) {
sbuf.clear();
int read = source.source.read(sbuf);
sbuf.flip();
if (read == -1)
return match;
}
if (!tbuf.hasRemaining()) {
readMore();
if (!tbuf.hasRemaining()) {
debug("target ending");
eof = true;
return match;
}
}
if (sbuf.get() != tbuf.get()) {
tbuf.position(tbuf.position() - 1);
return match;
}
match++;
}
}
private void readMore() throws IOException {
if (debug)
debug("readMore " + tbuf);
tbuf.compact();
c.read(tbuf);
tbuf.flip();
}
void hash() {
hash = Checksum.queryChecksum(tbuf, S);
}
/**
* Returns a debug <code>String</code>.
*/
@Override
public String toString()
{
return "Target[" +
" targetBuff=" + dump() + // this.tbuf +
" sourceBuff=" + this.sbuf +
" hashf=" + this.hash +
" 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);
sb.append( Character.forDigit(b1, 16) );
sb.append( Character.forDigit(b2, 16) );
}
public String getTextDump(ByteBuffer bb)
{
StringBuffer sb = new StringBuffer(bb.remaining() * 2);
bb.mark();
while (bb.hasRemaining()) {
int val = bb.get();
if (val > 32 && val < 127)
sb.append(" ").append((char)val);
else
append(sb, val);
}
bb.reset();
return sb.toString();
}
}
/**
* Creates a patch using file names.
*/
public static void main(String argv[]) throws Exception {
if (argv.length != 3) {
System.err.println("usage Delta [-d] source target [output]");
System.err.println("either -d or an output filename must be specified.");
System.err.println("aborting..");
return;
}
DiffWriter output = null;
File sourceFile = null;
File targetFile = null;
if (argv[0].equals("-d")) {
sourceFile = new File(argv[1]);
targetFile = new File(argv[2]);
output = new DebugDiffWriter();
} else {
sourceFile = new File(argv[0]);
targetFile = new File(argv[1]);
output =
new GDiffWriter(
new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(new File(argv[2])))));
}
if (sourceFile.length() > Integer.MAX_VALUE
|| targetFile.length() > Integer.MAX_VALUE) {
System.err.println(
"source or target is too large, max length is "
+ Integer.MAX_VALUE);
System.err.println("aborting..");
return;
}
Delta d = new Delta();
d.compute(sourceFile, targetFile, output);
output.flush();
output.close();
if (debug) //gls031504a
System.out.println("finished generating delta");
}
private void debug(String s) {
if (debug)
System.err.println(s);
}
}
@@ -0,0 +1,57 @@
/*
*
* Copyright (c) 2001 Torgeir Veimo
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
*/
package cpw.mods.fml.repackage.com.nothome.delta;
import java.io.Closeable;
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.
*/
public void close() throws IOException;
}
@@ -0,0 +1,245 @@
/*
*
* Copyright (c) 2001 Torgeir Veimo
* Copyright (c) 2006 Heiko Klein
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
*/
package cpw.mods.fml.repackage.com.nothome.delta;
import static cpw.mods.fml.repackage.com.nothome.delta.GDiffWriter.COPY_INT_INT;
import static cpw.mods.fml.repackage.com.nothome.delta.GDiffWriter.COPY_INT_UBYTE;
import static cpw.mods.fml.repackage.com.nothome.delta.GDiffWriter.COPY_INT_USHORT;
import static cpw.mods.fml.repackage.com.nothome.delta.GDiffWriter.COPY_LONG_INT;
import static cpw.mods.fml.repackage.com.nothome.delta.GDiffWriter.COPY_USHORT_INT;
import static cpw.mods.fml.repackage.com.nothome.delta.GDiffWriter.COPY_USHORT_UBYTE;
import static cpw.mods.fml.repackage.com.nothome.delta.GDiffWriter.COPY_USHORT_USHORT;
import static cpw.mods.fml.repackage.com.nothome.delta.GDiffWriter.DATA_INT;
import static cpw.mods.fml.repackage.com.nothome.delta.GDiffWriter.DATA_MAX;
import static cpw.mods.fml.repackage.com.nothome.delta.GDiffWriter.DATA_USHORT;
import static cpw.mods.fml.repackage.com.nothome.delta.GDiffWriter.EOF;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
/**
* This class patches an input file with a GDIFF patch fil�e.
*
* The patch file follows the GDIFF file specification available at
* {@link http://www.w3.org/TR/NOTE-gdiff-19970901.html}.
*/
public class GDiffPatcher {
private ByteBuffer buf = ByteBuffer.allocate(1024);
private byte buf2[] = buf.array();
/**
* Constructs a new 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"));
InputStream patch = new FileInputStream(patchFile);
OutputStream output = new FileOutputStream(outputFile);
try {
patch(source, patch, output);
} catch (IOException e) {
throw e;
} finally {
source.close();
patch.close();
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.
*/
public byte[] patch(byte[] source, byte[] patch) throws IOException {
ByteArrayOutputStream os = new ByteArrayOutputStream();
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);
// the magic string is 'd1 ff d1 ff' + the version number
if (patchIS.readUnsignedByte() != 0xd1 ||
patchIS.readUnsignedByte() != 0xff ||
patchIS.readUnsignedByte() != 0xd1 ||
patchIS.readUnsignedByte() != 0xff ||
patchIS.readUnsignedByte() != 0x04) {
throw new PatchException("magic string not found, aborting!");
}
while (true) {
int command = patchIS.readUnsignedByte();
if (command == EOF)
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();
append(length, patchIS, outOS);
break;
case DATA_INT: // int, n bytes following; append
length = patchIS.readInt();
append(length, patchIS, outOS);
break;
case COPY_USHORT_UBYTE:
offset = patchIS.readUnsignedShort();
length = patchIS.readUnsignedByte();
copy(offset, length, source, outOS);
break;
case COPY_USHORT_USHORT:
offset = patchIS.readUnsignedShort();
length = patchIS.readUnsignedShort();
copy(offset, length, source, outOS);
break;
case COPY_USHORT_INT:
offset = patchIS.readUnsignedShort();
length = patchIS.readInt();
copy(offset, length, source, outOS);
break;
case COPY_INT_UBYTE:
offset = patchIS.readInt();
length = patchIS.readUnsignedByte();
copy(offset, length, source, outOS);
break;
case COPY_INT_USHORT:
offset = patchIS.readInt();
length = patchIS.readUnsignedShort();
copy(offset, length, source, outOS);
break;
case COPY_INT_INT:
offset = patchIS.readInt();
length = patchIS.readInt();
copy(offset, length, source, outOS);
break;
case COPY_LONG_INT:
long loffset = patchIS.readLong();
length = patchIS.readInt();
copy(loffset, length, source, outOS);
break;
default:
throw new IllegalStateException("command " + command);
}
}
outOS.flush();
}
private void copy(long offset, int length, SeekableSource source, OutputStream output)
throws IOException
{
source.seek(offset);
while (length > 0) {
int len = Math.min(buf.capacity(), length);
buf.clear().limit(len);
int res = source.read(buf);
if (res == -1)
throw new EOFException("in copy " + offset + " " + length);
output.write(buf.array(), 0, res);
length -= res;
}
}
private void append(int length, InputStream patch, OutputStream output) throws IOException {
while (length > 0) {
int len = Math.min(buf2.length, length);
int res = patch.read(buf2, 0, len);
if (res == -1)
throw new EOFException("cannot read " + length);
output.write(buf2, 0, res);
length -= res;
}
}
/**
* Simple command line tool to patch a file.
*/
public static void main(String argv[]) {
if (argv.length != 3) {
System.err.println("usage GDiffPatch source patch output");
System.err.println("aborting..");
return;
}
try {
File sourceFile = new File(argv[0]);
File patchFile = new File(argv[1]);
File outputFile = new File(argv[2]);
if (sourceFile.length() > Integer.MAX_VALUE ||
patchFile.length() > Integer.MAX_VALUE) {
System.err.println("source or patch is too large, max length is " + Integer.MAX_VALUE);
System.err.println("aborting..");
return;
}
GDiffPatcher patcher = new GDiffPatcher();
patcher.patch(sourceFile, patchFile, outputFile);
System.out.println("finished patching file");
} catch (Exception ioe) { //gls031504a
System.err.println("error while patching: " + ioe);
}
}
}
@@ -0,0 +1,174 @@
/*
*
* Copyright (c) 2001 Torgeir Veimo
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
*/
package cpw.mods.fml.repackage.com.nothome.delta;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* Outputs a diff following the GDIFF file specification available at
* http://www.w3.org/TR/NOTE-gdiff-19970901.html.
*/
public class GDiffWriter implements DiffWriter {
/**
* Max length of a chunk.
*/
public static final int CHUNK_SIZE = Short.MAX_VALUE;
public static final byte EOF = 0;
/**
* Max length for single length data encode.
*/
public static final int DATA_MAX = 246;
public static final int DATA_USHORT = 247;
public static final int DATA_INT = 248;
public static final int COPY_USHORT_UBYTE = 249;
public static final int COPY_USHORT_USHORT = 250;
public static final int COPY_USHORT_INT = 251;
public static final int COPY_INT_UBYTE = 252;
public static final int COPY_INT_USHORT = 253;
public static final int COPY_INT_INT = 254;
public static final int COPY_LONG_INT = 255;
private ByteArrayOutputStream buf = new ByteArrayOutputStream();
private boolean debug = false;
private DataOutputStream output = null;
/**
* Constructs a new GDiffWriter.
*/
public GDiffWriter(DataOutputStream os) throws IOException {
this.output = os;
// write magic string "d1 ff d1 ff 04"
output.writeByte(0xd1);
output.writeByte(0xff);
output.writeByte(0xd1);
output.writeByte(0xff);
output.writeByte(0x04);
}
/**
* Constructs a new GDiffWriter.
*/
public GDiffWriter(OutputStream output) throws IOException {
this(new DataOutputStream(output));
}
public void addCopy(long offset, int length) throws IOException {
writeBuf();
//output debug data
if (debug)
System.err.println("COPY off: " + offset + ", len: " + length);
// output real data
if (offset > Integer.MAX_VALUE) {
// Actually, we don't support longer files than int.MAX_VALUE at the moment..
output.writeByte(COPY_LONG_INT);
output.writeLong(offset);
output.writeInt(length);
} else if (offset < 65536) {
if (length < 256) {
output.writeByte(COPY_USHORT_UBYTE);
output.writeShort((int)offset);
output.writeByte(length);
} else if (length > 65535) {
output.writeByte(COPY_USHORT_INT);
output.writeShort((int)offset);
output.writeInt(length);
} else {
output.writeByte(COPY_USHORT_USHORT);
output.writeShort((int)offset);
output.writeShort(length);
}
} else {
if (length < 256) {
output.writeByte(COPY_INT_UBYTE);
output.writeInt((int)offset);
output.writeByte(length);
} else if (length > 65535) {
output.writeByte(COPY_INT_INT);
output.writeInt((int)offset);
output.writeInt(length);
} else {
output.writeByte(COPY_INT_USHORT);
output.writeInt((int)offset);
output.writeShort(length);
}
}
}
/**
* Adds a data byte.
*/
public void addData(byte b) throws IOException {
buf.write(b);
if (buf.size() >= CHUNK_SIZE)
writeBuf();
}
private void writeBuf() throws IOException {
if (buf.size() > 0) {
if (buf.size() <= DATA_MAX) {
output.writeByte(buf.size());
} else if (buf.size() <= 65535) {
output.writeByte(DATA_USHORT);
output.writeShort(buf.size());
} else {
output.writeByte(DATA_INT);
output.writeInt(buf.size());
}
buf.writeTo(output);
buf.reset();
}
}
/**
* Flushes accumulated data bytes, if any.
*/
public void flush() throws IOException
{
writeBuf();
output.flush();
}
/**
* Writes the final EOF byte, closes the underlying stream.
*/
public void close() throws IOException {
this.flush();
output.write((byte)EOF);
output.close();
}
}
@@ -0,0 +1,51 @@
/*
* PatchException.java
*
* Created on June 6, 2006, 9:34 PM
* Copyright (c) 2006 Heiko Klein
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
*/
package cpw.mods.fml.repackage.com.nothome.delta;
import java.io.IOException;
/**
* Thrown when a patch is invalid.
*/
public class PatchException extends IOException {
private static final long serialVersionUID = 1;
/**
* Creates a new instance of <code>PatchException</code> without detail message.
*/
public PatchException() {
}
/**
* Constructs an instance of <code>PatchException</code> with the specified detail message.
* @param msg the detail message.
*/
public PatchException(String msg) {
super(msg);
}
}
@@ -0,0 +1,75 @@
/*
* RandomAccessFileSeekableSource.java
*
* Created on May 17, 2006, 1:45 PM
* Copyright (c) 2006 Heiko Klein
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
*
*/
package cpw.mods.fml.repackage.com.nothome.delta;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
/**
* Wraps a random access file.
*/
public class RandomAccessFileSeekableSource implements SeekableSource {
private RandomAccessFile raf;
/**
* Constructs a new RandomAccessFileSeekableSource.
* @param raf
*/
public RandomAccessFileSeekableSource(RandomAccessFile raf) {
if (raf == null)
throw new NullPointerException("raf");
this.raf = raf;
}
public void seek(long pos) throws IOException {
raf.seek(pos);
}
public int read(byte[] b, int off, int len) throws IOException {
return raf.read(b, off, len);
}
public long length() throws IOException {
return raf.length();
}
public void close() throws IOException {
raf.close();
}
public int read(ByteBuffer bb) throws IOException {
int c = raf.read(bb.array(), bb.position(), bb.remaining());
if (c == -1)
return -1;
bb.position(bb.position() + c);
return c;
}
}
@@ -0,0 +1,51 @@
/*
* SeekableSource.java
*
* Created on May 17, 2006, 12:33 PM
* Copyright (c) 2006 Heiko Klein
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
*/
package cpw.mods.fml.repackage.com.nothome.delta;
import java.io.Closeable;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
/**
* For sources of random-access data, such as {@link RandomAccessFile}.
*/
public interface SeekableSource extends Closeable {
/**
* Sets the position for the next {@link #read(ByteBuffer)}.
*/
void seek(long pos) throws IOException ;
/**
* Reads up to {@link ByteBuffer#remaining()} bytes from the source,
* returning the number of bytes read, or -1 if no bytes were read
* and EOF was reached.
*/
int read(ByteBuffer bb) throws IOException;
}
+44 -41
View File
@@ -1,73 +1,76 @@
#Main FML Access Transformer configuration file
# TileEntity addMapping
public aqp.a(Ljava/lang/Class;Ljava/lang/String;)V #MD:TileEntity/func_70306_a
public ash.a(Ljava/lang/Class;Ljava/lang/String;)V #MD:TileEntity/func_70306_a
# EntityList addMappings
public mv.a(Ljava/lang/Class;Ljava/lang/String;I)V #MD:EntityList/func_75618_a
public mv.a(Ljava/lang/Class;Ljava/lang/String;III)V #MD:EntityList/func_75614_a
public mv.b #FD:EntityList/field_75625_b #nameToClassMap
public mv.c #FD:EntityList/field_75626_c #classToNameMap
public mv.d #FD:EntityList/field_75623_d #idToClassMap
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
# RenderEngine
#public bba.h #FD:RenderEngine/field_78367_h #textureList # -- MISSING MAPPING # -- MISSING MAPPING
public bgf.g #FD:RenderEngine/field_78366_k #texturePack
#public bge.g #FD:RenderEngine/field_78366_k #texturePack # -- MISSING MAPPING
# RenderManager
public bgz.q #FD:RenderManager/field_78729_o #renderers
public bfx.q #FD:RenderManager/field_78729_o #renderers
# RenderBlocks - everything
public bgg.* #FD:RenderBlocks/*
public bgg.*() #MD:RenderBlocks/*
public bfd.* #FD:RenderBlocks/*
public bfd.*() #MD:RenderBlocks/*
#RenderPlayer
public-f bhu.h #FD:RenderPlayer/field_77110_j #armorlist
#public-f bht.h #FD:RenderPlayer/field_77110_j #armorlist # -- MISSING MAPPING
#RenderBiped
public-f bhh.k #FD:RenderBiped/field_82424_k #armorlist
public-f bgg.l #FD:RenderBiped/field_82424_k #armorlist
#StringTranslate
public bp.b #FD:StringTranslate/field_74815_b
public bp.e #FD:StringTranslate/field_74813_d
#public bp.b #FD:StringTranslate/field_74815_b # -- MISSING MAPPING
#public bp.e #FD:StringTranslate/field_74813_d # -- MISSING MAPPING
# TileEntityRenderer
public bje.m #FD:TileEntityRenderer/field_76966_m
public bip.m #FD:TileEntityRenderer/field_76966_m
# CraftingManager - make the add recipe methods public
public yk.a(Lwm;[Ljava/lang/Object;)Lyn; #MD:CraftingManager/func_92103_a
public yk.b(Lwm;[Ljava/lang/Object;)V #MD:CraftingManager/func_77596_b
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
# WeightedRandomItem
public lo.a #FD:WeightedRandomItem/field_76292_a #probability
public mf.a #FD:WeightedRandomItem/field_76292_a #probability
# ItemStack
#public+f tv.c #FD:ItemStack/field_77993_c #itemId
# StatBase
public ka.a #FD:StatBase/field_75978_a #statName
public kq.a #FD:StatBase/field_75978_a #statName
# NetLoginHandler
public jf.a(Ljf;Z)Z #MD:NetLoginHandler/func_72531_a #'complete connection'
public jf.g #FD:NetLoginHandler/field_72543_h #userName
public ju.a(Lju;Z)Z #MD:NetLoginHandler/func_72531_a #'complete connection'
public ju.g #FD:NetLoginHandler/field_72543_h #userName
# EntityPlayerMP getNextWindowId
public jc.cr()V #MD:EntityPlayerMP/func_71117_bO
public jc.cu #FD:EntityPlayerMP/field_71139_cq
public jr.bJ()V #MD:EntityPlayerMP/func_71117_bO
public jr.bX #FD:EntityPlayerMP/field_71139_cq
# EntityAITaskEntry
public oo #CL:EntityAITaskEntry
public pq #CL:EntityAITaskEntry
# EntityAITasks
public on.a #FD:EntityAITasks/field_75782_a #taskList
public pp.a #FD:EntityAITasks/field_75782_a #taskList
# BlockChest
public aln.m(Laab;III)Z #MD:BlockChest/func_72292_n #isOcelotBlockingChest
public anc.m(Labq;III)Z #MD:BlockChest/func_72292_n #isOcelotBlockingChest
# EntityLiving
public ng.aU #FD:EntityLiving/field_70736_aM #carryoverDamage
public ng.bo #FD:EntityLiving/field_70714_bg #tasks
public ng.bG #FD:EntityLiving/field_70703_bu #isJumping
#public ng.aU #FD:EntityLiving/field_70736_aM #carryoverDamage # -- MISSING MAPPING
public oc.c #FD:EntityLiving/field_70714_bg #tasks
#public ng.bG #FD:EntityLiving/field_70703_bu #isJumping # -- MISSING MAPPING
# EntityAIOcelotSit
protected pa.a(Laab;III)Z #MD:EntityAIOcelotSit/func_75398_a #nearestSittableBlock
protected pa.f()Z #MD:EntityAIOcelotSit/func_75399_f #isblocksittable
protected qc.a(Labq;III)Z #MD:EntityAIOcelotSit/func_75398_a #nearestSittableBlock
protected qc.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 qh.d #FD:EntityAnimal/field_70881_d #inLove
public rl.bp #FD:EntityAnimal/field_70881_d #inLove
# WorldType
public aal.<init>(ILjava/lang/String;)V #MD:WorldType/<init>(ILjava/lang/String;)
public aal.<init>(ILjava/lang/String;I)V #MD:WorldType/<init>(ILjava/lang/String;I)
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)
# ComponentVillage
public ahp #CL:ComponentVillage
public aje #CL:ComponentVillage
# EntityVillager - minmax lists
public sm.a(Lzr;ILjava/util/Random;F)V #MD:EntityVillager/func_70948_a #addBuy
public sm.b(Lzr;ILjava/util/Random;F)V #MD:EntityVillager/func_70949_b #addSell
public sm.bP #FD:EntityVillager/field_70958_bB
public sm.bQ #FD:EntityVillager/field_70960_bC
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
# GuiButtonMerchant
public azi #CL:GuiButtonMerchant
public axn #CL:GuiButtonMerchant
protected awk.a #FD:GuiYesNo/field_73942_a #guiScreen
protected aun.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
+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
sq cpw/mods/fml/common/network/Player
tz cpw/mods/fml/common/network/Player
net.minecraft.entity.player.EntityPlayer cpw/mods/fml/common/network/Player
# block -> blockproxy
apa cpw/mods/fml/common/registry/BlockProxy
aqr cpw/mods/fml/common/registry/BlockProxy
net.minecraft.block.Block cpw/mods/fml/common/registry/BlockProxy
# item -> itemproxy
wk cpw/mods/fml/common/registry/ItemProxy
xw cpw/mods/fml/common/registry/ItemProxy
net.minecraft.item.Item cpw/mods/fml/common/registry/ItemProxy
+2 -2
View File
@@ -3,8 +3,8 @@
"modid": "mcp",
"name": "Minecraft Coder Pack",
"description": "Modding toolkit to decompile and deobfuscate the Minecraft client and server files.",
"version": "7.44",
"mcversion": "1.5.1",
"version": "7.51",
"mcversion": "1.5.2",
"logoFile": "/mcp.png",
"url": "http://mcp.ocean-labs.de/",
"updateUrl": "",
+1 -1
View File
@@ -8,7 +8,7 @@ break-closing-brackets
indent-switches
max-instatement-indent=2
max-instatement-indent=40
pad-oper
pad-header
+166 -51
View File
@@ -1,6 +1,11 @@
searge,name,side,desc
field_100000_e,spawnChances,2,Chances for slimes to spawn in swamps for every moon phase.
field_100001_o,doneBtn,2,"""Done"" button for the GUI."
field_100002_d,cancelBtn,2,
field_100003_c,doneBtn,2,
field_100010_b,iconArray,2,
field_70009_b,chatBuffer,2,
field_100013_f,isPotionDurationMax,2,"True if potion effect duration is at maximum, false otherwise."
field_70009_b,buffer,2,RCon string buffer for log.
field_70010_a,consoleBuffer,2,only ever used by MinecraftServer.executeCommand
field_70116_cv,serverPosZ,2,
field_70117_cu,serverPosY,2,
@@ -137,6 +142,7 @@ field_70272_f,boatZ,2,
field_70273_g,boatYaw,2,
field_70274_d,boatX,2,
field_70275_e,boatY,2,
field_70276_b,speedMultiplier,2,
field_70277_c,boatPosRotationIncrements,2,
field_70278_an,velocityZ,2,
field_70280_j,velocityY,2,
@@ -257,7 +263,7 @@ field_70546_d,particleAge,2,
field_70547_e,particleMaxAge,2,
field_70548_b,particleTextureJitterX,2,
field_70549_c,particleTextureJitterY,2,
field_70550_a,particleTextureIndex,2,
field_70550_a,particleIcon,2,The icon field from which the given particle pulls its texture.
field_70551_j,particleBlue,2,"The blue amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0."
field_70552_h,particleRed,2,"The red amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0."
field_70553_i,particleGreen,2,"The green amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0."
@@ -340,7 +346,7 @@ field_70749_g,lookHelper,2,
field_70750_az,texture,2,the path for the texture of this entityLiving
field_70751_d,lastAttackingEntity,2,
field_70752_e,potionsNeedUpdate,2,Whether the DataWatcher needs to be updated with the active potions
field_70754_ba,limbSwing,2,Only relevant when legYaw is not 0(the entity is moving). Influences where in its swing legs and arms currently are.
field_70754_ba,limbSwing,2,Only relevant when limbYaw is not 0(the entity is moving). Influences where in its swing legs and arms currently are.
field_70755_b,entityLivingToAttack,2,"is only being set, has no uses as of MC 1.1"
field_70756_c,revengeTimer,2,
field_70757_a,livingSoundTime,2,Number of ticks since this EntityLiving last produced its sound
@@ -383,8 +389,12 @@ field_70855_f,attackTimer,2,
field_70856_g,holdRoseTick,2,
field_70857_d,villageObj,2,
field_70858_e,homeCheckTimer,2,"deincrements, and a distance-to-home check is done at 0"
field_70859_f,squidYaw,2,
field_70860_g,prevSquidYaw,2,
field_70861_d,squidPitch,2,
field_70862_e,prevSquidPitch,2,
field_70863_bz,randomMotionSpeed,2,
field_70865_by,lastTentacleAngle,2,the last calculated angle of the tentacles in radians
field_70865_by,prevTentacleAngle,2,the last calculated angle of the tentacles in radians
field_70866_j,tentacleAngle,2,angle of the tentacles in radians
field_70869_bD,randomMotionVecY,2,
field_70870_bE,randomMotionVecZ,2,
@@ -659,17 +669,18 @@ field_71572_b,posY,2,the y coordinate
field_71573_c,posZ,2,the z coordinate
field_71574_a,posX,2,
field_71576_a,theReportedExceptionCrashReport,2,Instance of CrashReport.
field_71577_f,enderEyeMetaToDirection,2,
field_71579_d,vineGrowth,2,
field_71580_e,footInvisibleFaceRemap,2,
field_71577_f,rotateRight,2,Maps a direction to that to the right of it.
field_71578_g,rotateLeft,2,Maps a direction to that to the left of it.
field_71579_d,facingToDirection,2,Maps a Facing value (3D) to a Direction value (2D).
field_71580_e,rotateOpposite,2,Maps a direction to that opposite of it.
field_71581_b,offsetZ,2,
field_71582_c,headInvisibleFace,2,
field_71582_c,directionToFacing,2,Maps a Direction value (2D) to a Facing value (3D).
field_71583_a,offsetX,2,
field_71584_h,bedDirection,2,
field_71585_d,offsetsZForSide,2,gives the offset required for this axis to get the block at that side.
field_71586_b,offsetsXForSide,2,gives the offset required for this axis to get the block at that side.
field_71587_c,offsetsYForSide,2,gives the offset required for this axis to get the block at that side.
field_71588_a,faceToSide,2,Converts a face to a side.
field_71588_a,oppositeSide,2,Converts a side to the opposite side. This is the same as XOR'ing it with 1.
field_71589_f,bc_pbe_sha512,2,
field_71590_g,bc_pbe_sha224,2,
field_71591_d,bc_pbe_sha256,2,
@@ -976,7 +987,7 @@ field_72041_aW,blockClay,2,
field_72042_aI,signWall,2,
field_72043_aJ,lever,2,
field_72044_aK,pressurePlateStone,2,
field_72045_aL,doorSteel,2,
field_72045_aL,doorIron,2,
field_72046_aM,pressurePlatePlanks,2,
field_72047_aN,oreRedstone,2,
field_72048_aO,oreRedstoneGlowing,2,
@@ -1013,7 +1024,7 @@ field_72079_ak,stoneSingleSlab,2,stoneSingleSlab
field_72080_bM,redstoneLampActive,2,
field_72081_al,brick,2,
field_72082_bJ,whiteStone,2,The rock found in The End.
field_72083_ai,blockSteel,2,
field_72083_ai,blockIron,2,
field_72084_bK,dragonEgg,2,
field_72085_aj,stoneDoubleSlab,2,stoneDoubleSlab
field_72086_bP,cocoaPlant,2,
@@ -1175,7 +1186,7 @@ field_72588_q,lastPosZ,2,The last known z position for this connection.
field_72589_p,lastPosY,2,The last known y position for this connection.
field_72590_a,loginHandler,2,The login handler that spawned this thread.
field_72595_f,requestIdAsString,2,The request ID stored as a String
field_72596_d,requestId,2,A client-provided request ID associated with this query
field_72596_d,requestId,2,A client-provided request ID associated with this query.
field_72597_e,challengeValue,2,A unique string of bytes used to verify client auth
field_72598_b,timestamp,2,The creation timestamp for this auth
field_72599_c,randomChallenge,2,A random challenge
@@ -1270,7 +1281,7 @@ field_72781_x,glSkyList2,2,OpenGL sky list 2
field_72782_b,theWorldServer,2,The WorldServer object.
field_72783_a,mcServer,2,Reference to the MinecraftServer object.
field_72792_d,entityViewDistance,2,
field_72793_b,trackedEntities,2,
field_72793_b,trackedEntities,2,"List of tracked entities, used for iteration operations on tracked entities."
field_72794_c,trackedEntityIDs,2,
field_72795_a,theWorld,2,
field_72814_d,hasExtendedLevels,2,set by !chunk.getAreLevelsEmpty
@@ -1454,7 +1465,7 @@ field_73261_d,locationOfBlockChange,2,
field_73262_e,numberOfTilesToUpdate,2,
field_73263_b,playersInChunk,2,
field_73264_c,chunkLocation,2,note: this is final
field_73265_a,myManager,2,
field_73265_a,thePlayerManager,2,
field_73286_b,clientPacketIdList,2,List of the client's packet IDs.
field_73287_r,isChunkDataPacket,2,"Only true for Packet51MapChunk, Packet52MultiBlockChange, Packet53BlockChange and Packet59ComplexEntity. Used to separate them into a different send queue."
field_73288_c,serverPacketIdList,2,List of the server's packet IDs.
@@ -1632,6 +1643,7 @@ field_73513_e,zPosition,2,The player's Z position.
field_73514_b,name,2,The player's name.
field_73515_c,xPosition,2,The player's X position.
field_73516_a,entityId,2,"The entity ID, in this case it's the player ID."
field_73517_j,metadataWatchableObjects,2,
field_73518_h,currentItem,2,The current item the player is holding.
field_73519_i,metadata,2,
field_73520_f,speedY,2,Not sent if the thrower entity ID is 0. The speed of this fireball along the Y axis.
@@ -1706,11 +1718,14 @@ field_73603_i,temp,2,A temporary storage for the compressed chunk data byte arra
field_73604_b,targetEntity,2,The entity the player is interacting with
field_73605_c,isLeftClick,2,Seems to be true when the player is pointing at an entity and left-clicking and false when right-clicking.
field_73606_a,playerEntityId,2,The entity of the player (ignored by the server)
field_73610_f,playerVelocityX,2,X velocity of the player being pushed by the explosion
field_73611_g,playerVelocityY,2,Y velocity of the player being pushed by the explosion
field_73612_d,explosionSize,2,
field_73613_e,chunkPositionRecords,2,
field_73614_b,explosionY,2,
field_73615_c,explosionZ,2,
field_73616_a,explosionX,2,
field_73617_h,playerVelocityZ,2,Z velocity of the player being pushed by the explosion
field_73618_b,eventType,2,"0: Invalid bed, 1: Rain starts, 2: Rain stops, 3: Game mode changed."
field_73619_c,gameMode,2,"When reason==3, the game mode to set. See EnumGameType for a list of values."
field_73620_a,clientMessage,2,The client prints clientMessage[eventType] to chat when this packet is received.
@@ -2874,6 +2889,7 @@ field_76168_c,capacity,2,the maximum amount of elements in the hash (probably 3/
field_76169_a,hashArray,2,the array of all elements in the hash
field_76171_a,texturePacks,2,
field_76172_a,parent,2,
field_76173_f,maxFileSize,2,
field_76174_d,destinationFile,2,
field_76175_e,downloadSuccess,2,
field_76176_b,sourceURL,2,
@@ -3292,7 +3308,6 @@ field_77022_g,itemRenderBlocks,2,
field_77023_b,zLevel,2,Defines the zLevel of rendering of item on GUI.
field_77024_a,renderWithColor,2,
field_77025_h,random,2,The RNG used in RenderItem (for bobbing itemstacks on the ground)
field_77027_a,itemIconIndex,2,"Have the icon index (in items.png) that will be used to render the image. Currently, eggs and snowballs uses this classes."
field_77045_g,mainModel,2,
field_77046_h,renderPassModel,2,The model to be used during the render passes.
field_77050_a,ironGolemModel,2,Iron Golem's Model.
@@ -3532,14 +3547,14 @@ field_77685_T,wheat,2,
field_77686_W,plateLeather,2,
field_77687_V,helmetLeather,2,
field_77688_Q,hoeDiamond,2,
field_77689_P,hoeSteel,2,
field_77689_P,hoeIron,2,
field_77690_S,seeds,2,
field_77691_R,hoeGold,2,
field_77692_Y,bootsLeather,2,
field_77693_X,legsLeather,2,
field_77694_Z,helmetChain,2,
field_77695_f,shovelSteel,2,
field_77696_g,pickaxeSteel,2,
field_77695_f,shovelIron,2,
field_77696_g,pickaxeIron,2,
field_77697_d,itemRand,2,The RNG used by the Item subclasses.
field_77698_e,itemsList,2,A 32000 elements Item array.
field_77699_b,maxDamage,2,Maximum damage an item can handle.
@@ -3551,7 +3566,7 @@ field_77704_l,arrow,2,
field_77705_m,coal,2,
field_77706_j,appleRed,2,
field_77707_k,bow,2,
field_77708_h,axeSteel,2,
field_77708_h,axeIron,2,
field_77709_i,flintAndSteel,2,
field_77710_w,shovelStone,2,
field_77711_v,swordStone,2,
@@ -3559,7 +3574,7 @@ field_77712_u,axeWood,2,
field_77713_t,pickaxeWood,2,
field_77714_s,shovelWood,2,
field_77715_r,swordWood,2,
field_77716_q,swordSteel,2,
field_77716_q,swordIron,2,
field_77717_p,ingotGold,2,
field_77718_z,swordDiamond,2,
field_77719_y,axeStone,2,
@@ -3609,7 +3624,7 @@ field_77762_aN,minecartCrate,2,
field_77763_aO,minecartPowered,2,
field_77764_aP,egg,2,
field_77765_aA,saddle,2,
field_77766_aB,doorSteel,2,
field_77766_aB,doorIron,2,
field_77767_aC,redstone,2,
field_77768_aD,snowball,2,
field_77769_aE,boat,2,
@@ -3634,7 +3649,7 @@ field_77787_bX,hasSubtypes,2,"Some items (like dyes) have multiple subtypes on s
field_77788_aw,bucketEmpty,2,
field_77789_bW,bFull3D,2,"If true, render the object in full 3D, like weapons and tools."
field_77790_av,doorWood,2,
field_77791_bV,iconIndex,2,Icon index in the icons table.
field_77791_bV,itemIcon,2,Icon index in the icons table.
field_77792_au,sign,2,
field_77793_bL,recordChirp,2,
field_77794_ak,bootsDiamond,2,
@@ -3655,19 +3670,19 @@ field_77808_an,legsGold,2,
field_77809_bD,expBottle,2,Bottle o' Enchanting. Drops between 1 and 3 experience orbs when thrown.
field_77810_ac,bootsChain,2,
field_77811_bE,fireballCharge,2,Fire Charge. When used in a dispenser it fires a fireball similiar to a Ghast's.
field_77812_ad,helmetSteel,2,
field_77812_ad,helmetIron,2,
field_77813_bB,speckledMelon,2,
field_77814_aa,plateChain,2,
field_77815_bC,monsterPlacer,2,
field_77816_ab,legsChain,2,
field_77817_bH,emerald,2,
field_77818_ag,bootsSteel,2,
field_77818_ag,bootsIron,2,
field_77819_bI,record13,2,
field_77820_ah,helmetDiamond,2,
field_77821_bF,writableBook,2,
field_77822_ae,plateSteel,2,
field_77822_ae,plateIron,2,
field_77823_bG,writtenBook,2,
field_77824_af,legsSteel,2,
field_77824_af,legsIron,2,
field_77826_b,toolMaterial,2,
field_77827_a,weaponDamage,2,
field_77830_a,spawnID,2,The ID of the block the reed will spawn when used from inventory bar.
@@ -4097,28 +4112,16 @@ field_78634_H,aoLightValueScratchXYPP,2,Used as a scratch variable for ambient o
field_78635_I,aoLightValueScratchYZPP,2,Used as a scratch variable for ambient occlusion between the top face and the west face.
field_78636_J,aoLightValueScratchXYZPPP,2,Used as a scratch variable for ambient occlusion on the south/top/west corner.
field_78637_K,aoLightValueScratchXZNN,2,Used as a scratch variable for ambient occlusion between the north face and the east face.
field_78638_aI,aoGrassXYZPCP,2,"Grass flag for ambient occlusion on Positive X, Center Y, and Positive Z"
field_78639_U,aoBrightnessXYZNNP,2,Ambient occlusion brightness XYZNNP
field_78640_aJ,aoGrassXYZNCP,2,"Grass flag for ambient occlusion on Negative X, Center Y, and Positive Z"
field_78641_T,aoBrightnessXYNN,2,Ambient occlusion brightness XYNN
field_78642_aK,aoGrassXYZPCN,2,"Grass flag for ambient occlusion on Positive X, Center Y, and Negative Z"
field_78643_W,aoBrightnessYZNP,2,Ambient occlusion brightness YZNP
field_78644_aL,aoGrassXYZCNN,2,"Grass flag for ambient occlusion on Center X, Negative Y, and Negative Z"
field_78645_V,aoBrightnessYZNN,2,Ambient occlusion brightness YZNN
field_78646_aM,aoGrassXYZPNC,2,"Grass flag for ambient occlusion on Positive X, Negative Y, and Center Z"
field_78647_aN,aoGrassXYZNNC,2,"Grass flag for ambient occlusion on Negative X, Negative Y, and center Z"
field_78648_aO,aoGrassXYZCNP,2,"Grass flag for ambient occlusion on Center X, Negative Y, and Positive Z"
field_78649_S,aoBrightnessXYZNNN,2,Ambient occlusion brightness XYZNNN
field_78650_aA,colorBlueBottomLeft,2,Blue color value for the bottom left corner
field_78651_aB,colorBlueBottomRight,2,Blue color value for the bottom right corner
field_78652_aC,colorBlueTopRight,2,Blue color value for the top right corner
field_78653_aD,aoGrassXYZCPN,2,"Grass flag for ambient occlusion on Center X, Positive Y, and Negative Z"
field_78654_aE,aoGrassXYZPPC,2,"Grass flag for ambient occlusion on Positive X, Positive Y, and Center Z"
field_78655_Y,aoBrightnessXYPN,2,Ambient occlusion brightness XYPN
field_78656_aF,aoGrassXYZNPC,2,"Grass flag for ambient occlusion on Negative X, Positive Y, and Center Z"
field_78657_X,aoBrightnessXYZPNN,2,Ambient occlusion brightness XYZPNN
field_78658_aG,aoGrassXYZCPP,2,"Grass flag for ambient occlusion on Center X, Positive Y, and Positive Z"
field_78659_aH,aoGrassXYZNCN,2,"Grass flag for ambient occlusion on Negative X, Center Y, and Negative Z"
field_78660_Z,aoBrightnessXYZPNP,2,Ambient occlusion brightness XYZPNP
field_78661_f,renderAllFaces,2,"If true, renders all faces on all blocks rather than using the logic in Block.shouldSideBeRendered. Unused."
field_78662_g,uvRotateEast,2,
@@ -4130,9 +4133,7 @@ field_78667_b,fancyGrass,2,Fancy grass side matching biome
field_78668_c,useInventoryTint,2,
field_78669_a,blockAccess,2,The IBlockAccess used by this instance of RenderBlocks
field_78670_at,colorRedBottomRight,2,Red color value for the bottom right corner
field_78671_n,lightValueOwn,2,Light value of the block itself
field_78672_as,colorRedBottomLeft,2,Red color value for the bottom left corner
field_78673_o,aoLightValueXNeg,2,Light value one block less in x axis
field_78674_ar,colorRedTopLeft,2,Red color value for the top left corner
field_78675_l,uvRotateBottom,2,
field_78676_aq,brightnessTopRight,2,Brightness top right
@@ -4152,15 +4153,9 @@ field_78689_v,aoLightValueScratchXYNN,2,Used as a scratch variable for ambient o
field_78690_ai,aoBrightnessXZNN,2,Ambient occlusion brightness XZNN
field_78691_u,aoLightValueScratchXYZNNN,2,Used as a scratch variable for ambient occlusion on the north/bottom/east corner.
field_78692_aj,aoBrightnessXZPN,2,Ambient occlusion brightness XZPN
field_78693_t,aoLightValueZPos,2,Light value one block more in z axis
field_78694_ao,brightnessBottomLeft,2,Brightness bottom left
field_78695_s,aoLightValueYPos,2,Light value one block more in y axis
field_78696_ap,brightnessBottomRight,2,Brightness bottom right
field_78697_r,aoLightValueXPos,2,Light value one block more in x axis
field_78698_am,aoType,2,"Ambient occlusion type (0=simple, 1=complex)"
field_78699_q,aoLightValueZNeg,2,Light value one block more in z axis
field_78700_an,brightnessTopLeft,2,Brightness top left
field_78701_p,aoLightValueYNeg,2,Light value one block more in y axis
field_78702_ac,aoBrightnessXYZNPP,2,Ambient occlusion brightness XYZNPP
field_78703_ad,aoBrightnessYZPN,2,Ambient occlusion brightness YZPN
field_78704_aa,aoBrightnessXYZNPN,2,Ambient occlusion brightness XYZNPN
@@ -4316,6 +4311,8 @@ field_82135_d,isBeaconActive,2,
field_82136_e,levels,2,Level of this beacon's pyramid.
field_82139_a,effectsList,2,List of effects that Beacon can apply
field_82140_h,payment,2,Item given to this beacon as payment.
field_82151_R,distanceWalkedOnStepModified,2,
field_82152_aq,teleportDirection,2,
field_82153_h,timeInPortal,2,
field_82155_f,isAnvil,2,
field_82156_g,fallHurtMax,2,Maximum amount of damage dealt to entities hit by falling block
@@ -4329,6 +4326,7 @@ field_82176_d,armorProbability,2,Probability to get armor
field_82177_b,enchantmentProbability,2,An array of probabilities that determines whether a random enchantment should be added to the held item. Indexed by difficulty.
field_82178_c,armorEnchantmentProbability,2,Probability to get enchanted armor
field_82179_bU,persistenceRequired,2,Whether this entity should NOT despawn.
field_82180_bT,previousEquipment,2,"The equipment this mob was previously wearing, used for syncing."
field_82181_as,pickUpLootProability,2,Probability to pick up loot
field_82182_bS,equipment,2,Equipment (armor and held item) for this entity.
field_82184_d,aiControlledByPlayer,2,AI task for player control.
@@ -4424,6 +4422,9 @@ field_82527_a,dispenseBehaviorRegistry,2,Registry for all dispense behaviors.
field_82537_a,sensible,2,"Whether this button is sensible to arrows, used by wooden buttons."
field_82539_a,types,2,The types of the wall.
field_82548_a,theChunkCoordinates,2,
field_82559_a,readSuccessfully,2,"Always 1, unless readByte threw an exception."
field_82561_f,disableRelativeVolume,2,
field_82562_a,worldAge,2,World age in ticks.
field_82564_f,showCape,2,
field_82575_g,totalTime,2,Total time for this world.
field_82576_c,generatorOptions,2,
@@ -4512,6 +4513,7 @@ field_82807_a,skullTypes,2,
field_82808_b,cropId,2,Block ID of the crop this seed food should place.
field_82809_c,soilId,2,Block ID of the soil this seed food should be planted on.
field_82811_a,hangingEntityClass,2,
field_82818_l,goldenCarrotEffect,2,
field_82822_g,gameVersion,2,Game version for this server.
field_82823_k,hideAddress,2,Whether to hide the IP address for this server.
field_82826_b,statusBarLength,2,
@@ -4580,6 +4582,8 @@ field_85080_a,blockID,2,
field_85082_a,theSuspiciousClasses,2,
field_85084_a,theCrashReport,2,
field_85086_a,theCrashReport,2,
field_85087_d,lastUpdateTime,2,The worldtime at which this PortalPosition was last verified
field_85088_e,teleporterInstance,2,The teleporter to which this PortalPosition applies
field_85098_d,globalRenderer,2,
field_85109_a,worldInfoInstance,2,
field_85111_a,worldInfoInstance,2,
@@ -4598,6 +4602,8 @@ field_85168_c,theMapStructureGenerator,2,
field_85171_a,theDedicatedServer,2,
field_85180_cf,recordWait,2,
field_85185_A,touchscreen,2,
field_85190_d,destinationCoordinateKeys,2,A list of valid keys for the destinationCoordainteCache. These are based on the X & Z of the players initial location.
field_85191_c,destinationCoordinateCache,2,Stores successful portal placement locations for rapid lookup.
field_85192_a,worldServerInstance,2,
field_90017_e,isMacOs,2,
field_90018_r,isRightMouseClick,2,Used when touchscreen is enabled
@@ -4612,10 +4618,15 @@ field_90051_a,theMinecraft,2,
field_90053_a,theMinecraft,2,
field_90055_a,theMinecraft,2,
field_92014_j,explosionStrength,2,The explosion radius of spawned fireballs.
field_92016_l,highlightingItemStack,2,The ItemStack that is currently being highlighted
field_92017_k,remainingHighlightTicks,2,Remaining ticks the item highlight should be visible
field_92039_az,fireworkExplosions,2,
field_92055_b,lifetime,2,The lifetime of the firework in ticks. When the age reaches the lifetime the firework explodes.
field_92056_a,fireworkAge,2,The age of the firework in ticks.
field_92061_d,isChristmas,2,"If true, chests will be rendered with the Christmas present textures."
field_92076_h,skyLightSent,2,"Whether or not the chunk data contains a light nibble array. This is true in the main world, false in the end + nether."
field_92077_h,pitch,2,The pitch in steps of 2p/256
field_92078_i,yaw,2,The yaw in steps of 2p/256
field_92086_a,isBlank,2,When isBlank is true the DataWatcher is not watching any objects
field_92091_k,thorns,2,
field_92104_bU,firework,2,
@@ -4624,12 +4635,19 @@ field_92106_bV,fireworkCharge,2,
field_92117_D,heldItemTooltips,2,
field_92118_B,overrideWidth,2,
field_92119_C,overrideHeight,2,
field_94050_c,customName,2,
field_94054_b,particleTextureIndexX,2,
field_94055_c,particleTextureIndexY,2,
field_94084_b,tntPlacedBy,2,
field_94102_c,entityName,2,
field_94106_a,minecartTNTFuse,2,
field_94109_b,pushZ,2,
field_94110_c,fuel,2,
field_94111_a,pushX,2,
field_94112_b,dropContentsWhenDead,2,"When set to true, the minecart will drop all items when setDead() is called. When false (such as when travelling dimensions) it preserves its contents."
field_94113_a,minecartContainerItems,2,
field_94123_d,inventoryName,2,The name that is displayed if the hopper was renamed
field_94124_b,hopperItemStacks,2,
field_94141_F,destroyBlockIcons,2,
field_94153_n,boundTexture,2,
field_94154_l,textureMapBlocks,2,
@@ -4699,8 +4717,8 @@ field_94299_k,textureWrap,2,
field_94300_h,textureTarget,2,
field_94301_i,textureMinFilter,2,
field_94302_r,textureData,2,
field_94303_q,textureCreated,2,
field_94304_p,autoCreate,2,
field_94303_q,textureNotModified,2,False if the texture has been modified since it was last uploaded to the GPU.
field_94304_p,autoCreate,2,"Uninitialized boolean. If true, the texture is re-uploaded every time it's modified. If false, every tick after it's been modified at least once in that tick."
field_94313_f,maxHeight,2,
field_94314_g,forcePowerOf2,2,
field_94315_d,currentHeight,2,
@@ -4713,7 +4731,7 @@ field_94322_k,atlasTexture,2,
field_94323_h,maxTileDimension,2,Max size (width or height) of a single tile
field_94336_cN,blockIcon,2,
field_94337_cv,railActivator,2,
field_94338_cu,stairCompactNetherQuartz,2,
field_94338_cu,stairsNetherQuartz,2,
field_94339_ct,blockNetherQuartz,2,
field_94340_cs,hopperBlock,2,
field_94341_cq,blockRedstone,2,
@@ -4725,6 +4743,8 @@ field_94346_cn,redstoneComparatorIdle,2,
field_94347_ck,chestTrapped,2,
field_94348_cl,pressurePlateGold,2,
field_94349_a,iconArray,2,
field_94356_a,pressurePlateIconName,2,
field_94357_a,maxItemsWeighted,2,The maximum number of items the plate weights.
field_94359_b,theIcon,2,
field_94362_b,theIcon,2,
field_94363_a,iconArray,2,
@@ -4733,7 +4753,16 @@ field_94365_a,iconArray,2,
field_94366_b,iconArray,2,
field_94367_a,grassTypes,2,
field_94369_b,theIcon,2,
field_94371_c,saplingIcon,2,
field_94372_b,iconArray,2,
field_94376_b,cauldronTopIcon,2,
field_94377_c,cauldronBottomIcon,2,
field_94379_b,cactusBottomIcon,2,
field_94380_a,cactusTopIcon,2,
field_94381_b,cakeBottomIcon,2,
field_94383_a,cakeTopIcon,2,
field_94384_b,workbenchIconFront,2,
field_94385_a,workbenchIconTop,2,
field_94386_b,woodTextureTypes,2,
field_94387_c,iconArray,2,
field_94388_cO,tree_top,2,
@@ -4751,19 +4780,49 @@ field_94420_a,quartzBlockTypes,2,
field_94423_a,theIcon,2,
field_94425_a,theIcon,2,
field_94428_c,iconArray,2,
field_94430_b,breakableBlockIcon,2,
field_94431_cO,anvilIconNames,2,
field_94432_cP,iconArray,2,
field_94433_b,theIcon,2,
field_94435_b,iconSnowSide,2,
field_94436_c,iconGrassSideOverlay,2,
field_94437_a,iconGrassTop,2,
field_94439_c,iconArray,2,
field_94443_a,isTrapped,2,Determines whether of not the chest is trapped.
field_94445_a,iconArray,2,
field_94447_a,theIcon,2,
field_94449_b,theIcon,2,
field_94450_a,theIcon,2,
field_94454_cO,hopperInsideIcon,2,
field_94455_b,hopperIcon,2,
field_94456_c,hopperTopIcon,2,
field_94458_cO,furnaceIconTop,2,
field_94459_cP,furnaceIconFront,2,
field_94462_cO,furnaceFrontIcon,2,
field_94463_c,furnaceTopIcon,2,
field_94465_b,doorTypeForIcon,2,Used for pointing at icon names.
field_94466_c,iconArray,2,
field_94467_a,doorIconNames,2,
field_94469_b,iconArray,2,
field_94582_cb,tntMinecart,2,
field_94470_a,cocoaIcons,2,
field_94471_cO,bedTopIcons,2,
field_94473_c,bedSideIcons,2,
field_94497_cO,topIcon,2,Top icon of piston depends on (either sticky or normal)
field_94498_b,innerTopIcon,2,Only visible when piston is extended
field_94499_c,bottomIcon,2,Bottom side texture
field_94500_e,useProvidedWindowTitle,2,"If false, the client will look up a string like ""window.minecart"". If true, the client uses what the server provides."
field_94512_f,isStraightRail,2,
field_94513_g,railChunkPosition,2,The chunk position the rail is at.
field_94514_d,railY,2,
field_94515_e,railZ,2,
field_94516_b,logicWorld,2,
field_94517_c,railX,2,
field_94518_a,theRail,2,
field_94557_a,selectAnything,2,
field_94582_cb,minecartTnt,2,
field_94583_ca,netherQuartz,2,
field_94584_bZ,netherrackBrick,2,
field_94585_bY,comparator,2,
field_94593_a,theIcon,2,
field_94596_a,theIcon,2,
field_94598_a,theIcon,2,
@@ -4772,6 +4831,9 @@ field_94601_a,bowPullIconNameArray,2,
field_94610_a,theTileEntity,2,
field_94612_a,theTileEntity,2,
field_96093_i,entityUniqueID,2,
field_96105_c,commandSenderName,2,"The name of command sender (usually username, but possibly ""Rcon"")"
field_96106_a,succesCount,2,
field_96113_a,isBlocked,2,Whether this hopper minecart is being blocked by an activator rail.
field_96291_i,pointedEntityLiving,2,
field_96442_D,worldScoreboard,2,
field_96452_b,flipU,2,
@@ -4784,29 +4846,82 @@ field_96462_b,potionItemStack,2,
field_96463_c,dispenserPotionBehavior,2,
field_96464_b,defaultDispenserItemBehavior,2,
field_96469_cy,dropper,2,
field_96474_cR,dropperDefaultBehaviour,2,
field_96480_b,scoreName,2,The unique name for the scoreboard to be displayed.
field_96481_a,scoreboardPosition,2,"The position of the scoreboard. 0 = list, 1 = sidebar, 2 = belowName."
field_96482_b,objectiveDisplayName,2,
field_96483_c,change,2,"0 to create scoreboard, 1 to remove scoreboard, 2 to update display text."
field_96484_a,objectiveName,2,
field_96485_d,updateOrRemove,2,0 to create/update an item. 1 to remove an item.
field_96486_b,scoreName,2,The unique name for the scoreboard to be updated. Only sent when updateOrRemove does not equal 1.
field_96487_c,value,2,The score to be displayed next to the entry. Only sent when Update/Remove does not equal 1.
field_96488_a,itemName,2,An unique name to be displayed in the list.
field_96489_f,mode,2,If 0 then the team is created. If 1 then the team is removed. If 2 the team team information is updated. If 3 then new players are added to the team. If 4 then players are removed from the team.
field_96491_d,teamSuffix,2,Only if mode = 0 or 2. Displayed after the players' name that are part of this team.
field_96492_e,playerNames,2,Only if mode = 0 or 3 or 4. Players to be added/remove from the team.
field_96493_b,teamDisplayName,2,Only if mode = 0 or 2.
field_96494_c,teamPrefix,2,Only if mode = 0 or 2. Displayed before the players' name that are part of this team.
field_96495_a,teamName,2,A unique name for the team.
field_96540_f,teamMemberships,2,Map of usernames to ScorePlayerTeam objects.
field_96545_a,scoreObjectives,2,Map of objective names to ScoreObjective objects.
field_96564_a,theEntity,2,
field_96566_b,selectInventories,2,
field_96569_b,theEntityTracker,2,
field_96600_cc,hopperMinecart,2,
field_96600_cc,minecartHopper,2,
field_96601_a,theBlock,2,
field_96602_b,dispenserMinecartBehavior,2,
field_96633_b,playerInventory,2,
field_96634_a,theItemStack,2,
field_96656_b,theScoreboard,2,
field_96676_c,membershipSet,2,A set of all team member usernames.
field_96677_a,theScoreboard,2,
field_96683_d,displayName,2,
field_96684_b,name,2,
field_96685_c,objectiveCriteria,2,The ScoreObjectiveCriteria for this objetive
field_96686_a,theScoreboard,2,
field_96691_E,chatScale,2,
field_96692_F,chatWidth,2,
field_96693_G,chatHeightUnfocused,2,
field_96694_H,chatHeightFocused,2,
field_98040_a,mobSpawnerLogic,2,Mob spawner logic for this spawner minecart.
field_98044_b,transferTicker,2,
field_98048_c,transferCooldown,2,
field_98051_e,fallingBlockTileEntityData,2,
field_98130_m,serverLogAgent,2,
field_98151_a,theTexture,2,
field_98181_L,worldLogAgent,2,The log agent for this world.
field_98189_n,partialRenderBounds,2,
field_98203_f,offsetY,2,This is added to the Y position after being multiplied by random.nextGaussian()
field_98204_g,offsetZ,2,This is added to the Z position after being multiplied by random.nextGaussian()
field_98205_d,posZ,2,Z position of the particle.
field_98206_e,offsetX,2,This is added to the X position after being multiplied by random.nextGaussian()
field_98207_b,posX,2,X position of the particle.
field_98208_c,posY,2,Y position of the particle.
field_98209_a,particleName,2,The name of the particle to create. A list can be found at https://gist.github.com/thinkofdeath/5110835
field_98210_h,speed,2,The speed of each particle.
field_98211_i,quantity,2,The number of particles to create.
field_98212_g,friendlyFire,2,Only if mode = 0 or 2.
field_98219_c,entityAvoiderAI,2,
field_98223_c,minecartName,2,
field_98226_b,theNetServerHandler,2,
field_98227_a,thePacket,2,
field_98239_d,loggerPrefix,2,
field_98240_b,logFile,2,
field_98241_c,loggerName,2,
field_98242_a,serverLogger,2,
field_98244_b,theNetServerHandler,2,
field_98245_a,thePacket,2,
field_98282_f,randomMinecart,2,
field_98283_g,minSpawnDelay,2,
field_98285_e,minecartToSpawn,2,List of minecart to spawn.
field_98286_b,spawnDelay,2,The delay to spawn.
field_98288_a,mobID,2,
field_98289_l,activatingRangeFromPlayer,2,The distance from which a player activates the spawner.
field_98290_m,spawnRange,2,The range coefficient for spawning entities around.
field_98292_k,maxNearbyEntities,2,
field_98293_h,maxSpawnDelay,2,
field_98294_i,spawnCount,2,A counter for spawn tries.
field_98295_a,mobSpawnerEntity,2,The mob spawner we deal with
field_98296_a,spawnerMinecart,2,The spawner minecart using this mob spawner logic.
field_98303_au,AMBIENT_OCCLUSIONS,2,
field_98307_f,fontTextureName,2,
1 searge name side desc
2 field_100000_e spawnChances 2 Chances for slimes to spawn in swamps for every moon phase.
3 field_100001_o doneBtn 2 "Done" button for the GUI.
4 field_100002_d cancelBtn 2
5 field_100003_c doneBtn 2
6 field_100010_b iconArray 2
7 field_70009_b field_100013_f chatBuffer isPotionDurationMax 2 True if potion effect duration is at maximum, false otherwise.
8 field_70009_b buffer 2 RCon string buffer for log.
9 field_70010_a consoleBuffer 2 only ever used by MinecraftServer.executeCommand
10 field_70116_cv serverPosZ 2
11 field_70117_cu serverPosY 2
142 field_70273_g boatYaw 2
143 field_70274_d boatX 2
144 field_70275_e boatY 2
145 field_70276_b speedMultiplier 2
146 field_70277_c boatPosRotationIncrements 2
147 field_70278_an velocityZ 2
148 field_70280_j velocityY 2
263 field_70547_e particleMaxAge 2
264 field_70548_b particleTextureJitterX 2
265 field_70549_c particleTextureJitterY 2
266 field_70550_a particleTextureIndex particleIcon 2 The icon field from which the given particle pulls its texture.
267 field_70551_j particleBlue 2 The blue amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0.
268 field_70552_h particleRed 2 The red amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0.
269 field_70553_i particleGreen 2 The green amount of color. Used as a percentage, 1.0 = 255 and 0.0 = 0.
346 field_70750_az texture 2 the path for the texture of this entityLiving
347 field_70751_d lastAttackingEntity 2
348 field_70752_e potionsNeedUpdate 2 Whether the DataWatcher needs to be updated with the active potions
349 field_70754_ba limbSwing 2 Only relevant when legYaw is not 0(the entity is moving). Influences where in its swing legs and arms currently are. Only relevant when limbYaw is not 0(the entity is moving). Influences where in its swing legs and arms currently are.
350 field_70755_b entityLivingToAttack 2 is only being set, has no uses as of MC 1.1
351 field_70756_c revengeTimer 2
352 field_70757_a livingSoundTime 2 Number of ticks since this EntityLiving last produced its sound
389 field_70856_g holdRoseTick 2
390 field_70857_d villageObj 2
391 field_70858_e homeCheckTimer 2 deincrements, and a distance-to-home check is done at 0
392 field_70859_f squidYaw 2
393 field_70860_g prevSquidYaw 2
394 field_70861_d squidPitch 2
395 field_70862_e prevSquidPitch 2
396 field_70863_bz randomMotionSpeed 2
397 field_70865_by lastTentacleAngle prevTentacleAngle 2 the last calculated angle of the tentacles in radians
398 field_70866_j tentacleAngle 2 angle of the tentacles in radians
399 field_70869_bD randomMotionVecY 2
400 field_70870_bE randomMotionVecZ 2
669 field_71573_c posZ 2 the z coordinate
670 field_71574_a posX 2
671 field_71576_a theReportedExceptionCrashReport 2 Instance of CrashReport.
672 field_71577_f enderEyeMetaToDirection rotateRight 2 Maps a direction to that to the right of it.
673 field_71579_d field_71578_g vineGrowth rotateLeft 2 Maps a direction to that to the left of it.
674 field_71580_e field_71579_d footInvisibleFaceRemap facingToDirection 2 Maps a Facing value (3D) to a Direction value (2D).
675 field_71580_e rotateOpposite 2 Maps a direction to that opposite of it.
676 field_71581_b offsetZ 2
677 field_71582_c headInvisibleFace directionToFacing 2 Maps a Direction value (2D) to a Facing value (3D).
678 field_71583_a offsetX 2
679 field_71584_h bedDirection 2
680 field_71585_d offsetsZForSide 2 gives the offset required for this axis to get the block at that side.
681 field_71586_b offsetsXForSide 2 gives the offset required for this axis to get the block at that side.
682 field_71587_c offsetsYForSide 2 gives the offset required for this axis to get the block at that side.
683 field_71588_a faceToSide oppositeSide 2 Converts a face to a side. Converts a side to the opposite side. This is the same as XOR'ing it with 1.
684 field_71589_f bc_pbe_sha512 2
685 field_71590_g bc_pbe_sha224 2
686 field_71591_d bc_pbe_sha256 2
987 field_72042_aI signWall 2
988 field_72043_aJ lever 2
989 field_72044_aK pressurePlateStone 2
990 field_72045_aL doorSteel doorIron 2
991 field_72046_aM pressurePlatePlanks 2
992 field_72047_aN oreRedstone 2
993 field_72048_aO oreRedstoneGlowing 2
1024 field_72080_bM redstoneLampActive 2
1025 field_72081_al brick 2
1026 field_72082_bJ whiteStone 2 The rock found in The End.
1027 field_72083_ai blockSteel blockIron 2
1028 field_72084_bK dragonEgg 2
1029 field_72085_aj stoneDoubleSlab 2 stoneDoubleSlab
1030 field_72086_bP cocoaPlant 2
1186 field_72589_p lastPosY 2 The last known y position for this connection.
1187 field_72590_a loginHandler 2 The login handler that spawned this thread.
1188 field_72595_f requestIdAsString 2 The request ID stored as a String
1189 field_72596_d requestId 2 A client-provided request ID associated with this query A client-provided request ID associated with this query.
1190 field_72597_e challengeValue 2 A unique string of bytes used to verify client auth
1191 field_72598_b timestamp 2 The creation timestamp for this auth
1192 field_72599_c randomChallenge 2 A random challenge
1281 field_72782_b theWorldServer 2 The WorldServer object.
1282 field_72783_a mcServer 2 Reference to the MinecraftServer object.
1283 field_72792_d entityViewDistance 2
1284 field_72793_b trackedEntities 2 List of tracked entities, used for iteration operations on tracked entities.
1285 field_72794_c trackedEntityIDs 2
1286 field_72795_a theWorld 2
1287 field_72814_d hasExtendedLevels 2 set by !chunk.getAreLevelsEmpty
1465 field_73262_e numberOfTilesToUpdate 2
1466 field_73263_b playersInChunk 2
1467 field_73264_c chunkLocation 2 note: this is final
1468 field_73265_a myManager thePlayerManager 2
1469 field_73286_b clientPacketIdList 2 List of the client's packet IDs.
1470 field_73287_r isChunkDataPacket 2 Only true for Packet51MapChunk, Packet52MultiBlockChange, Packet53BlockChange and Packet59ComplexEntity. Used to separate them into a different send queue.
1471 field_73288_c serverPacketIdList 2 List of the server's packet IDs.
1643 field_73514_b name 2 The player's name.
1644 field_73515_c xPosition 2 The player's X position.
1645 field_73516_a entityId 2 The entity ID, in this case it's the player ID.
1646 field_73517_j metadataWatchableObjects 2
1647 field_73518_h currentItem 2 The current item the player is holding.
1648 field_73519_i metadata 2
1649 field_73520_f speedY 2 Not sent if the thrower entity ID is 0. The speed of this fireball along the Y axis.
1718 field_73604_b targetEntity 2 The entity the player is interacting with
1719 field_73605_c isLeftClick 2 Seems to be true when the player is pointing at an entity and left-clicking and false when right-clicking.
1720 field_73606_a playerEntityId 2 The entity of the player (ignored by the server)
1721 field_73610_f playerVelocityX 2 X velocity of the player being pushed by the explosion
1722 field_73611_g playerVelocityY 2 Y velocity of the player being pushed by the explosion
1723 field_73612_d explosionSize 2
1724 field_73613_e chunkPositionRecords 2
1725 field_73614_b explosionY 2
1726 field_73615_c explosionZ 2
1727 field_73616_a explosionX 2
1728 field_73617_h playerVelocityZ 2 Z velocity of the player being pushed by the explosion
1729 field_73618_b eventType 2 0: Invalid bed, 1: Rain starts, 2: Rain stops, 3: Game mode changed.
1730 field_73619_c gameMode 2 When reason==3, the game mode to set. See EnumGameType for a list of values.
1731 field_73620_a clientMessage 2 The client prints clientMessage[eventType] to chat when this packet is received.
2889 field_76169_a hashArray 2 the array of all elements in the hash
2890 field_76171_a texturePacks 2
2891 field_76172_a parent 2
2892 field_76173_f maxFileSize 2
2893 field_76174_d destinationFile 2
2894 field_76175_e downloadSuccess 2
2895 field_76176_b sourceURL 2
3308 field_77023_b zLevel 2 Defines the zLevel of rendering of item on GUI.
3309 field_77024_a renderWithColor 2
3310 field_77025_h random 2 The RNG used in RenderItem (for bobbing itemstacks on the ground)
field_77027_a itemIconIndex 2 Have the icon index (in items.png) that will be used to render the image. Currently, eggs and snowballs uses this classes.
3311 field_77045_g mainModel 2
3312 field_77046_h renderPassModel 2 The model to be used during the render passes.
3313 field_77050_a ironGolemModel 2 Iron Golem's Model.
3547 field_77686_W plateLeather 2
3548 field_77687_V helmetLeather 2
3549 field_77688_Q hoeDiamond 2
3550 field_77689_P hoeSteel hoeIron 2
3551 field_77690_S seeds 2
3552 field_77691_R hoeGold 2
3553 field_77692_Y bootsLeather 2
3554 field_77693_X legsLeather 2
3555 field_77694_Z helmetChain 2
3556 field_77695_f shovelSteel shovelIron 2
3557 field_77696_g pickaxeSteel pickaxeIron 2
3558 field_77697_d itemRand 2 The RNG used by the Item subclasses.
3559 field_77698_e itemsList 2 A 32000 elements Item array.
3560 field_77699_b maxDamage 2 Maximum damage an item can handle.
3566 field_77705_m coal 2
3567 field_77706_j appleRed 2
3568 field_77707_k bow 2
3569 field_77708_h axeSteel axeIron 2
3570 field_77709_i flintAndSteel 2
3571 field_77710_w shovelStone 2
3572 field_77711_v swordStone 2
3574 field_77713_t pickaxeWood 2
3575 field_77714_s shovelWood 2
3576 field_77715_r swordWood 2
3577 field_77716_q swordSteel swordIron 2
3578 field_77717_p ingotGold 2
3579 field_77718_z swordDiamond 2
3580 field_77719_y axeStone 2
3624 field_77763_aO minecartPowered 2
3625 field_77764_aP egg 2
3626 field_77765_aA saddle 2
3627 field_77766_aB doorSteel doorIron 2
3628 field_77767_aC redstone 2
3629 field_77768_aD snowball 2
3630 field_77769_aE boat 2
3649 field_77788_aw bucketEmpty 2
3650 field_77789_bW bFull3D 2 If true, render the object in full 3D, like weapons and tools.
3651 field_77790_av doorWood 2
3652 field_77791_bV iconIndex itemIcon 2 Icon index in the icons table.
3653 field_77792_au sign 2
3654 field_77793_bL recordChirp 2
3655 field_77794_ak bootsDiamond 2
3670 field_77809_bD expBottle 2 Bottle o' Enchanting. Drops between 1 and 3 experience orbs when thrown.
3671 field_77810_ac bootsChain 2
3672 field_77811_bE fireballCharge 2 Fire Charge. When used in a dispenser it fires a fireball similiar to a Ghast's.
3673 field_77812_ad helmetSteel helmetIron 2
3674 field_77813_bB speckledMelon 2
3675 field_77814_aa plateChain 2
3676 field_77815_bC monsterPlacer 2
3677 field_77816_ab legsChain 2
3678 field_77817_bH emerald 2
3679 field_77818_ag bootsSteel bootsIron 2
3680 field_77819_bI record13 2
3681 field_77820_ah helmetDiamond 2
3682 field_77821_bF writableBook 2
3683 field_77822_ae plateSteel plateIron 2
3684 field_77823_bG writtenBook 2
3685 field_77824_af legsSteel legsIron 2
3686 field_77826_b toolMaterial 2
3687 field_77827_a weaponDamage 2
3688 field_77830_a spawnID 2 The ID of the block the reed will spawn when used from inventory bar.
4112 field_78635_I aoLightValueScratchYZPP 2 Used as a scratch variable for ambient occlusion between the top face and the west face.
4113 field_78636_J aoLightValueScratchXYZPPP 2 Used as a scratch variable for ambient occlusion on the south/top/west corner.
4114 field_78637_K aoLightValueScratchXZNN 2 Used as a scratch variable for ambient occlusion between the north face and the east face.
field_78638_aI aoGrassXYZPCP 2 Grass flag for ambient occlusion on Positive X, Center Y, and Positive Z
4115 field_78639_U aoBrightnessXYZNNP 2 Ambient occlusion brightness XYZNNP
field_78640_aJ aoGrassXYZNCP 2 Grass flag for ambient occlusion on Negative X, Center Y, and Positive Z
4116 field_78641_T aoBrightnessXYNN 2 Ambient occlusion brightness XYNN
field_78642_aK aoGrassXYZPCN 2 Grass flag for ambient occlusion on Positive X, Center Y, and Negative Z
4117 field_78643_W aoBrightnessYZNP 2 Ambient occlusion brightness YZNP
field_78644_aL aoGrassXYZCNN 2 Grass flag for ambient occlusion on Center X, Negative Y, and Negative Z
4118 field_78645_V aoBrightnessYZNN 2 Ambient occlusion brightness YZNN
field_78646_aM aoGrassXYZPNC 2 Grass flag for ambient occlusion on Positive X, Negative Y, and Center Z
field_78647_aN aoGrassXYZNNC 2 Grass flag for ambient occlusion on Negative X, Negative Y, and center Z
field_78648_aO aoGrassXYZCNP 2 Grass flag for ambient occlusion on Center X, Negative Y, and Positive Z
4119 field_78649_S aoBrightnessXYZNNN 2 Ambient occlusion brightness XYZNNN
4120 field_78650_aA colorBlueBottomLeft 2 Blue color value for the bottom left corner
4121 field_78651_aB colorBlueBottomRight 2 Blue color value for the bottom right corner
4122 field_78652_aC colorBlueTopRight 2 Blue color value for the top right corner
field_78653_aD aoGrassXYZCPN 2 Grass flag for ambient occlusion on Center X, Positive Y, and Negative Z
field_78654_aE aoGrassXYZPPC 2 Grass flag for ambient occlusion on Positive X, Positive Y, and Center Z
4123 field_78655_Y aoBrightnessXYPN 2 Ambient occlusion brightness XYPN
field_78656_aF aoGrassXYZNPC 2 Grass flag for ambient occlusion on Negative X, Positive Y, and Center Z
4124 field_78657_X aoBrightnessXYZPNN 2 Ambient occlusion brightness XYZPNN
field_78658_aG aoGrassXYZCPP 2 Grass flag for ambient occlusion on Center X, Positive Y, and Positive Z
field_78659_aH aoGrassXYZNCN 2 Grass flag for ambient occlusion on Negative X, Center Y, and Negative Z
4125 field_78660_Z aoBrightnessXYZPNP 2 Ambient occlusion brightness XYZPNP
4126 field_78661_f renderAllFaces 2 If true, renders all faces on all blocks rather than using the logic in Block.shouldSideBeRendered. Unused.
4127 field_78662_g uvRotateEast 2
4133 field_78668_c useInventoryTint 2
4134 field_78669_a blockAccess 2 The IBlockAccess used by this instance of RenderBlocks
4135 field_78670_at colorRedBottomRight 2 Red color value for the bottom right corner
field_78671_n lightValueOwn 2 Light value of the block itself
4136 field_78672_as colorRedBottomLeft 2 Red color value for the bottom left corner
field_78673_o aoLightValueXNeg 2 Light value one block less in x axis
4137 field_78674_ar colorRedTopLeft 2 Red color value for the top left corner
4138 field_78675_l uvRotateBottom 2
4139 field_78676_aq brightnessTopRight 2 Brightness top right
4153 field_78690_ai aoBrightnessXZNN 2 Ambient occlusion brightness XZNN
4154 field_78691_u aoLightValueScratchXYZNNN 2 Used as a scratch variable for ambient occlusion on the north/bottom/east corner.
4155 field_78692_aj aoBrightnessXZPN 2 Ambient occlusion brightness XZPN
field_78693_t aoLightValueZPos 2 Light value one block more in z axis
4156 field_78694_ao brightnessBottomLeft 2 Brightness bottom left
field_78695_s aoLightValueYPos 2 Light value one block more in y axis
4157 field_78696_ap brightnessBottomRight 2 Brightness bottom right
field_78697_r aoLightValueXPos 2 Light value one block more in x axis
field_78698_am aoType 2 Ambient occlusion type (0=simple, 1=complex)
field_78699_q aoLightValueZNeg 2 Light value one block more in z axis
4158 field_78700_an brightnessTopLeft 2 Brightness top left
field_78701_p aoLightValueYNeg 2 Light value one block more in y axis
4159 field_78702_ac aoBrightnessXYZNPP 2 Ambient occlusion brightness XYZNPP
4160 field_78703_ad aoBrightnessYZPN 2 Ambient occlusion brightness YZPN
4161 field_78704_aa aoBrightnessXYZNPN 2 Ambient occlusion brightness XYZNPN
4311 field_82136_e levels 2 Level of this beacon's pyramid.
4312 field_82139_a effectsList 2 List of effects that Beacon can apply
4313 field_82140_h payment 2 Item given to this beacon as payment.
4314 field_82151_R distanceWalkedOnStepModified 2
4315 field_82152_aq teleportDirection 2
4316 field_82153_h timeInPortal 2
4317 field_82155_f isAnvil 2
4318 field_82156_g fallHurtMax 2 Maximum amount of damage dealt to entities hit by falling block
4326 field_82177_b enchantmentProbability 2 An array of probabilities that determines whether a random enchantment should be added to the held item. Indexed by difficulty.
4327 field_82178_c armorEnchantmentProbability 2 Probability to get enchanted armor
4328 field_82179_bU persistenceRequired 2 Whether this entity should NOT despawn.
4329 field_82180_bT previousEquipment 2 The equipment this mob was previously wearing, used for syncing.
4330 field_82181_as pickUpLootProability 2 Probability to pick up loot
4331 field_82182_bS equipment 2 Equipment (armor and held item) for this entity.
4332 field_82184_d aiControlledByPlayer 2 AI task for player control.
4422 field_82537_a sensible 2 Whether this button is sensible to arrows, used by wooden buttons.
4423 field_82539_a types 2 The types of the wall.
4424 field_82548_a theChunkCoordinates 2
4425 field_82559_a readSuccessfully 2 Always 1, unless readByte threw an exception.
4426 field_82561_f disableRelativeVolume 2
4427 field_82562_a worldAge 2 World age in ticks.
4428 field_82564_f showCape 2
4429 field_82575_g totalTime 2 Total time for this world.
4430 field_82576_c generatorOptions 2
4513 field_82808_b cropId 2 Block ID of the crop this seed food should place.
4514 field_82809_c soilId 2 Block ID of the soil this seed food should be planted on.
4515 field_82811_a hangingEntityClass 2
4516 field_82818_l goldenCarrotEffect 2
4517 field_82822_g gameVersion 2 Game version for this server.
4518 field_82823_k hideAddress 2 Whether to hide the IP address for this server.
4519 field_82826_b statusBarLength 2
4582 field_85082_a theSuspiciousClasses 2
4583 field_85084_a theCrashReport 2
4584 field_85086_a theCrashReport 2
4585 field_85087_d lastUpdateTime 2 The worldtime at which this PortalPosition was last verified
4586 field_85088_e teleporterInstance 2 The teleporter to which this PortalPosition applies
4587 field_85098_d globalRenderer 2
4588 field_85109_a worldInfoInstance 2
4589 field_85111_a worldInfoInstance 2
4602 field_85171_a theDedicatedServer 2
4603 field_85180_cf recordWait 2
4604 field_85185_A touchscreen 2
4605 field_85190_d destinationCoordinateKeys 2 A list of valid keys for the destinationCoordainteCache. These are based on the X & Z of the players initial location.
4606 field_85191_c destinationCoordinateCache 2 Stores successful portal placement locations for rapid lookup.
4607 field_85192_a worldServerInstance 2
4608 field_90017_e isMacOs 2
4609 field_90018_r isRightMouseClick 2 Used when touchscreen is enabled
4618 field_90053_a theMinecraft 2
4619 field_90055_a theMinecraft 2
4620 field_92014_j explosionStrength 2 The explosion radius of spawned fireballs.
4621 field_92016_l highlightingItemStack 2 The ItemStack that is currently being highlighted
4622 field_92017_k remainingHighlightTicks 2 Remaining ticks the item highlight should be visible
4623 field_92039_az fireworkExplosions 2
4624 field_92055_b lifetime 2 The lifetime of the firework in ticks. When the age reaches the lifetime the firework explodes.
4625 field_92056_a fireworkAge 2 The age of the firework in ticks.
4626 field_92061_d isChristmas 2 If true, chests will be rendered with the Christmas present textures.
4627 field_92076_h skyLightSent 2 Whether or not the chunk data contains a light nibble array. This is true in the main world, false in the end + nether.
4628 field_92077_h pitch 2 The pitch in steps of 2p/256
4629 field_92078_i yaw 2 The yaw in steps of 2p/256
4630 field_92086_a isBlank 2 When isBlank is true the DataWatcher is not watching any objects
4631 field_92091_k thorns 2
4632 field_92104_bU firework 2
4635 field_92117_D heldItemTooltips 2
4636 field_92118_B overrideWidth 2
4637 field_92119_C overrideHeight 2
4638 field_94050_c customName 2
4639 field_94054_b particleTextureIndexX 2
4640 field_94055_c particleTextureIndexY 2
4641 field_94084_b tntPlacedBy 2
4642 field_94102_c entityName 2
4643 field_94106_a minecartTNTFuse 2
4644 field_94109_b pushZ 2
4645 field_94110_c fuel 2
4646 field_94111_a pushX 2
4647 field_94112_b dropContentsWhenDead 2 When set to true, the minecart will drop all items when setDead() is called. When false (such as when travelling dimensions) it preserves its contents.
4648 field_94113_a minecartContainerItems 2
4649 field_94123_d inventoryName 2 The name that is displayed if the hopper was renamed
4650 field_94124_b hopperItemStacks 2
4651 field_94141_F destroyBlockIcons 2
4652 field_94153_n boundTexture 2
4653 field_94154_l textureMapBlocks 2
4717 field_94300_h textureTarget 2
4718 field_94301_i textureMinFilter 2
4719 field_94302_r textureData 2
4720 field_94303_q textureCreated textureNotModified 2 False if the texture has been modified since it was last uploaded to the GPU.
4721 field_94304_p autoCreate 2 Uninitialized boolean. If true, the texture is re-uploaded every time it's modified. If false, every tick after it's been modified at least once in that tick.
4722 field_94313_f maxHeight 2
4723 field_94314_g forcePowerOf2 2
4724 field_94315_d currentHeight 2
4731 field_94323_h maxTileDimension 2 Max size (width or height) of a single tile
4732 field_94336_cN blockIcon 2
4733 field_94337_cv railActivator 2
4734 field_94338_cu stairCompactNetherQuartz stairsNetherQuartz 2
4735 field_94339_ct blockNetherQuartz 2
4736 field_94340_cs hopperBlock 2
4737 field_94341_cq blockRedstone 2
4743 field_94347_ck chestTrapped 2
4744 field_94348_cl pressurePlateGold 2
4745 field_94349_a iconArray 2
4746 field_94356_a pressurePlateIconName 2
4747 field_94357_a maxItemsWeighted 2 The maximum number of items the plate weights.
4748 field_94359_b theIcon 2
4749 field_94362_b theIcon 2
4750 field_94363_a iconArray 2
4753 field_94366_b iconArray 2
4754 field_94367_a grassTypes 2
4755 field_94369_b theIcon 2
4756 field_94371_c saplingIcon 2
4757 field_94372_b iconArray 2
4758 field_94376_b cauldronTopIcon 2
4759 field_94377_c cauldronBottomIcon 2
4760 field_94379_b cactusBottomIcon 2
4761 field_94380_a cactusTopIcon 2
4762 field_94381_b cakeBottomIcon 2
4763 field_94383_a cakeTopIcon 2
4764 field_94384_b workbenchIconFront 2
4765 field_94385_a workbenchIconTop 2
4766 field_94386_b woodTextureTypes 2
4767 field_94387_c iconArray 2
4768 field_94388_cO tree_top 2
4780 field_94423_a theIcon 2
4781 field_94425_a theIcon 2
4782 field_94428_c iconArray 2
4783 field_94430_b breakableBlockIcon 2
4784 field_94431_cO anvilIconNames 2
4785 field_94432_cP iconArray 2
4786 field_94433_b theIcon 2
4787 field_94435_b iconSnowSide 2
4788 field_94436_c iconGrassSideOverlay 2
4789 field_94437_a iconGrassTop 2
4790 field_94439_c iconArray 2
4791 field_94443_a isTrapped 2 Determines whether of not the chest is trapped.
4792 field_94445_a iconArray 2
4793 field_94447_a theIcon 2
4794 field_94449_b theIcon 2
4795 field_94450_a theIcon 2
4796 field_94454_cO hopperInsideIcon 2
4797 field_94455_b hopperIcon 2
4798 field_94456_c hopperTopIcon 2
4799 field_94458_cO furnaceIconTop 2
4800 field_94459_cP furnaceIconFront 2
4801 field_94462_cO furnaceFrontIcon 2
4802 field_94463_c furnaceTopIcon 2
4803 field_94465_b doorTypeForIcon 2 Used for pointing at icon names.
4804 field_94466_c iconArray 2
4805 field_94467_a doorIconNames 2
4806 field_94469_b iconArray 2
4807 field_94582_cb field_94470_a tntMinecart cocoaIcons 2
4808 field_94471_cO bedTopIcons 2
4809 field_94473_c bedSideIcons 2
4810 field_94497_cO topIcon 2 Top icon of piston depends on (either sticky or normal)
4811 field_94498_b innerTopIcon 2 Only visible when piston is extended
4812 field_94499_c bottomIcon 2 Bottom side texture
4813 field_94500_e useProvidedWindowTitle 2 If false, the client will look up a string like "window.minecart". If true, the client uses what the server provides.
4814 field_94512_f isStraightRail 2
4815 field_94513_g railChunkPosition 2 The chunk position the rail is at.
4816 field_94514_d railY 2
4817 field_94515_e railZ 2
4818 field_94516_b logicWorld 2
4819 field_94517_c railX 2
4820 field_94518_a theRail 2
4821 field_94557_a selectAnything 2
4822 field_94582_cb minecartTnt 2
4823 field_94583_ca netherQuartz 2
4824 field_94584_bZ netherrackBrick 2
4825 field_94585_bY comparator 2
4826 field_94593_a theIcon 2
4827 field_94596_a theIcon 2
4828 field_94598_a theIcon 2
4831 field_94610_a theTileEntity 2
4832 field_94612_a theTileEntity 2
4833 field_96093_i entityUniqueID 2
4834 field_96105_c commandSenderName 2 The name of command sender (usually username, but possibly "Rcon")
4835 field_96106_a succesCount 2
4836 field_96113_a isBlocked 2 Whether this hopper minecart is being blocked by an activator rail.
4837 field_96291_i pointedEntityLiving 2
4838 field_96442_D worldScoreboard 2
4839 field_96452_b flipU 2
4846 field_96463_c dispenserPotionBehavior 2
4847 field_96464_b defaultDispenserItemBehavior 2
4848 field_96469_cy dropper 2
4849 field_96474_cR dropperDefaultBehaviour 2
4850 field_96480_b scoreName 2 The unique name for the scoreboard to be displayed.
4851 field_96481_a scoreboardPosition 2 The position of the scoreboard. 0 = list, 1 = sidebar, 2 = belowName.
4852 field_96482_b objectiveDisplayName 2
4853 field_96483_c change 2 0 to create scoreboard, 1 to remove scoreboard, 2 to update display text.
4854 field_96484_a objectiveName 2
4855 field_96485_d updateOrRemove 2 0 to create/update an item. 1 to remove an item.
4856 field_96486_b scoreName 2 The unique name for the scoreboard to be updated. Only sent when updateOrRemove does not equal 1.
4857 field_96487_c value 2 The score to be displayed next to the entry. Only sent when Update/Remove does not equal 1.
4858 field_96488_a itemName 2 An unique name to be displayed in the list.
4859 field_96489_f mode 2 If 0 then the team is created. If 1 then the team is removed. If 2 the team team information is updated. If 3 then new players are added to the team. If 4 then players are removed from the team.
4860 field_96491_d teamSuffix 2 Only if mode = 0 or 2. Displayed after the players' name that are part of this team.
4861 field_96492_e playerNames 2 Only if mode = 0 or 3 or 4. Players to be added/remove from the team.
4862 field_96493_b teamDisplayName 2 Only if mode = 0 or 2.
4863 field_96494_c teamPrefix 2 Only if mode = 0 or 2. Displayed before the players' name that are part of this team.
4864 field_96495_a teamName 2 A unique name for the team.
4865 field_96540_f teamMemberships 2 Map of usernames to ScorePlayerTeam objects.
4866 field_96545_a scoreObjectives 2 Map of objective names to ScoreObjective objects.
4867 field_96564_a theEntity 2
4868 field_96566_b selectInventories 2
4869 field_96569_b theEntityTracker 2
4870 field_96600_cc hopperMinecart minecartHopper 2
4871 field_96601_a theBlock 2
4872 field_96602_b dispenserMinecartBehavior 2
4873 field_96633_b playerInventory 2
4874 field_96634_a theItemStack 2
4875 field_96656_b theScoreboard 2
4876 field_96676_c membershipSet 2 A set of all team member usernames.
4877 field_96677_a theScoreboard 2
4878 field_96683_d displayName 2
4879 field_96684_b name 2
4880 field_96685_c objectiveCriteria 2 The ScoreObjectiveCriteria for this objetive
4881 field_96686_a theScoreboard 2
4882 field_96691_E chatScale 2
4883 field_96692_F chatWidth 2
4884 field_96693_G chatHeightUnfocused 2
4885 field_96694_H chatHeightFocused 2
4886 field_98040_a mobSpawnerLogic 2 Mob spawner logic for this spawner minecart.
4887 field_98044_b transferTicker 2
4888 field_98048_c transferCooldown 2
4889 field_98051_e fallingBlockTileEntityData 2
4890 field_98130_m serverLogAgent 2
4891 field_98151_a theTexture 2
4892 field_98181_L worldLogAgent 2 The log agent for this world.
4893 field_98189_n partialRenderBounds 2
4894 field_98203_f offsetY 2 This is added to the Y position after being multiplied by random.nextGaussian()
4895 field_98204_g offsetZ 2 This is added to the Z position after being multiplied by random.nextGaussian()
4896 field_98205_d posZ 2 Z position of the particle.
4897 field_98206_e offsetX 2 This is added to the X position after being multiplied by random.nextGaussian()
4898 field_98207_b posX 2 X position of the particle.
4899 field_98208_c posY 2 Y position of the particle.
4900 field_98209_a particleName 2 The name of the particle to create. A list can be found at https://gist.github.com/thinkofdeath/5110835
4901 field_98210_h speed 2 The speed of each particle.
4902 field_98211_i quantity 2 The number of particles to create.
4903 field_98212_g friendlyFire 2 Only if mode = 0 or 2.
4904 field_98219_c entityAvoiderAI 2
4905 field_98223_c minecartName 2
4906 field_98226_b theNetServerHandler 2
4907 field_98227_a thePacket 2
4908 field_98239_d loggerPrefix 2
4909 field_98240_b logFile 2
4910 field_98241_c loggerName 2
4911 field_98242_a serverLogger 2
4912 field_98244_b theNetServerHandler 2
4913 field_98245_a thePacket 2
4914 field_98282_f randomMinecart 2
4915 field_98283_g minSpawnDelay 2
4916 field_98285_e minecartToSpawn 2 List of minecart to spawn.
4917 field_98286_b spawnDelay 2 The delay to spawn.
4918 field_98288_a mobID 2
4919 field_98289_l activatingRangeFromPlayer 2 The distance from which a player activates the spawner.
4920 field_98290_m spawnRange 2 The range coefficient for spawning entities around.
4921 field_98292_k maxNearbyEntities 2
4922 field_98293_h maxSpawnDelay 2
4923 field_98294_i spawnCount 2 A counter for spawn tries.
4924 field_98295_a mobSpawnerEntity 2 The mob spawner we deal with
4925 field_98296_a spawnerMinecart 2 The spawner minecart using this mob spawner logic.
4926 field_98303_au AMBIENT_OCCLUSIONS 2
4927 field_98307_f fontTextureName 2
+60 -46
View File
@@ -167,6 +167,7 @@ net/minecraft/client/Minecraft.func_71404_a(Lnet/minecraft/src/CrashReport;)V=|p
net/minecraft/client/Minecraft.func_71409_c(Ljava/lang/String;)Z=|p_71409_1_
net/minecraft/client/Minecraft.main([Ljava/lang/String;)V=|p_main_0_
net/minecraft/server/MinecraftServer.<init>(Ljava/io/File;)V=|p_i3375_1_
net/minecraft/server/MinecraftServer.func_104055_i(Z)V=|p_104055_1_
net/minecraft/server/MinecraftServer.func_70000_a(Lnet/minecraft/src/PlayerUsageSnooper;)V=|p_70000_1_
net/minecraft/server/MinecraftServer.func_70001_b(Lnet/minecraft/src/PlayerUsageSnooper;)V=|p_70001_1_
net/minecraft/server/MinecraftServer.func_70003_b(ILjava/lang/String;)Z=|p_70003_1_,p_70003_2_
@@ -867,6 +868,7 @@ net/minecraft/src/BlockFurnace.func_71861_g(Lnet/minecraft/src/World;III)V=|p_71
net/minecraft/src/BlockFurnace.func_71862_a(Lnet/minecraft/src/World;IIILjava/util/Random;)V=|p_71862_1_,p_71862_2_,p_71862_3_,p_71862_4_,p_71862_5_
net/minecraft/src/BlockFurnace.func_71885_a(ILjava/util/Random;I)I=|p_71885_1_,p_71885_2_,p_71885_3_
net/minecraft/src/BlockFurnace.func_71903_a(Lnet/minecraft/src/World;IIILnet/minecraft/src/EntityPlayer;IFFF)Z=|p_71903_1_,p_71903_2_,p_71903_3_,p_71903_4_,p_71903_5_,p_71903_6_,p_71903_7_,p_71903_8_,p_71903_9_
net/minecraft/src/BlockFurnace.func_71922_a(Lnet/minecraft/src/World;III)I=|p_71922_1_,p_71922_2_,p_71922_3_,p_71922_4_
net/minecraft/src/BlockFurnace.func_72274_a(Lnet/minecraft/src/World;)Lnet/minecraft/src/TileEntity;=|p_72274_1_
net/minecraft/src/BlockFurnace.func_72285_l(Lnet/minecraft/src/World;III)V=|p_72285_1_,p_72285_2_,p_72285_3_,p_72285_4_
net/minecraft/src/BlockFurnace.func_72286_a(ZLnet/minecraft/src/World;III)V=|p_72286_0_,p_72286_1_,p_72286_2_,p_72286_3_,p_72286_4_
@@ -3874,7 +3876,7 @@ net/minecraft/src/GuiCommandBlock.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73
net/minecraft/src/GuiCommandBlock.func_73864_a(III)V=|p_73864_1_,p_73864_2_,p_73864_3_
net/minecraft/src/GuiCommandBlock.func_73869_a(CI)V=|p_73869_1_,p_73869_2_
net/minecraft/src/GuiCommandBlock.func_73875_a(Lnet/minecraft/src/GuiButton;)V=|p_73875_1_
net/minecraft/src/GuiConfirmOpenLink.<init>(Lnet/minecraft/src/GuiScreen;Ljava/lang/String;I)V=|p_i3102_1_,p_i3102_2_,p_i3102_3_
net/minecraft/src/GuiConfirmOpenLink.<init>(Lnet/minecraft/src/GuiScreen;Ljava/lang/String;IZ)V=|p_i23004_1_,p_i23004_2_,p_i23004_3_,p_i23004_4_
net/minecraft/src/GuiConfirmOpenLink.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiConfirmOpenLink.func_73875_a(Lnet/minecraft/src/GuiButton;)V=|p_73875_1_
net/minecraft/src/GuiConnecting.<init>(Lnet/minecraft/src/GuiScreen;Lnet/minecraft/client/Minecraft;Ljava/lang/String;I)V=|p_i11014_1_,p_i11014_2_,p_i11014_3_,p_i11014_4_
@@ -4025,6 +4027,26 @@ net/minecraft/src/GuiLogOutputHandler.<init>(Ljavax/swing/JTextArea;)V=|p_i4102_
net/minecraft/src/GuiLogOutputHandler.close()V=|
net/minecraft/src/GuiLogOutputHandler.flush()V=|
net/minecraft/src/GuiLogOutputHandler.publish(Ljava/util/logging/LogRecord;)V=|p_publish_1_
net/minecraft/src/GuiMainMenu.func_104004_a(Lnet/minecraft/src/GuiMainMenu;)Ljava/lang/Object;=|p_104004_0_
net/minecraft/src/GuiMainMenu.func_104005_a(Lnet/minecraft/src/GuiMainMenu;Ljava/lang/String;)Ljava/lang/String;=|p_104005_0_,p_104005_1_
net/minecraft/src/GuiMainMenu.func_104006_a(Lnet/minecraft/src/GuiMainMenu;I)I=|p_104006_0_,p_104006_1_
net/minecraft/src/GuiMainMenu.func_104007_d(Lnet/minecraft/src/GuiMainMenu;)Lnet/minecraft/src/FontRenderer;=|p_104007_0_
net/minecraft/src/GuiMainMenu.func_104008_c(Lnet/minecraft/src/GuiMainMenu;I)I=|p_104008_0_,p_104008_1_
net/minecraft/src/GuiMainMenu.func_104009_d(Lnet/minecraft/src/GuiMainMenu;I)I=|p_104009_0_,p_104009_1_
net/minecraft/src/GuiMainMenu.func_98059_a(Z)Z=|p_98059_0_
net/minecraft/src/GuiMainMenu.func_104011_e(Lnet/minecraft/src/GuiMainMenu;I)I=|p_104011_0_,p_104011_1_
net/minecraft/src/GuiMainMenu.func_104012_f(Lnet/minecraft/src/GuiMainMenu;I)I=|p_104012_0_,p_104012_1_
net/minecraft/src/GuiMainMenu.func_104013_b(Lnet/minecraft/src/GuiMainMenu;Ljava/lang/String;)Ljava/lang/String;=|p_104013_0_,p_104013_1_
net/minecraft/src/GuiMainMenu.func_104014_b(Lnet/minecraft/src/GuiMainMenu;I)I=|p_104014_0_,p_104014_1_
net/minecraft/src/GuiMainMenu.func_104015_f(Lnet/minecraft/src/GuiMainMenu;)I=|p_104015_0_
net/minecraft/src/GuiMainMenu.func_104016_e(Lnet/minecraft/src/GuiMainMenu;)I=|p_104016_0_
net/minecraft/src/GuiMainMenu.func_98058_a(Lnet/minecraft/src/GuiMainMenu;)Lnet/minecraft/client/Minecraft;=|p_98058_0_
net/minecraft/src/GuiMainMenu.func_104018_h(Lnet/minecraft/src/GuiMainMenu;)I=|p_104018_0_
net/minecraft/src/GuiMainMenu.func_104019_g(Lnet/minecraft/src/GuiMainMenu;)Ljava/util/List;=|p_104019_0_
net/minecraft/src/GuiMainMenu.func_104020_i(Lnet/minecraft/src/GuiMainMenu;)I=|p_104020_0_
net/minecraft/src/GuiMainMenu.func_98061_a(Lnet/minecraft/src/GuiMainMenu;Lnet/minecraft/src/StringTranslate;II)V=|p_98061_0_,p_98061_1_,p_98061_2_,p_98061_3_
net/minecraft/src/GuiMainMenu.func_104022_c(Lnet/minecraft/src/GuiMainMenu;)Lnet/minecraft/src/FontRenderer;=|p_104022_0_
net/minecraft/src/GuiMainMenu.func_104023_b(Lnet/minecraft/src/GuiMainMenu;)Ljava/lang/String;=|p_104023_0_
net/minecraft/src/GuiMainMenu.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiMainMenu.func_73864_a(III)V=|p_73864_1_,p_73864_2_,p_73864_3_
net/minecraft/src/GuiMainMenu.func_73869_a(CI)V=|p_73869_1_,p_73869_2_
@@ -4036,10 +4058,7 @@ net/minecraft/src/GuiMainMenu.func_73970_b(IIF)V=|p_73970_1_,p_73970_2_,p_73970_
net/minecraft/src/GuiMainMenu.func_73971_c(IIF)V=|p_73971_1_,p_73971_2_,p_73971_3_
net/minecraft/src/GuiMainMenu.func_73972_b(IILnet/minecraft/src/StringTranslate;)V=|p_73972_1_,p_73972_2_,p_73972_3_
net/minecraft/src/GuiMainMenu.func_96137_a(Lnet/minecraft/src/StringTranslate;II)V=|p_96137_1_,p_96137_2_,p_96137_3_
net/minecraft/src/GuiMainMenu.func_98058_a(Lnet/minecraft/src/GuiMainMenu;)Lnet/minecraft/client/Minecraft;=|p_98058_0_
net/minecraft/src/GuiMainMenu.func_98059_a(Z)Z=|p_98059_0_
net/minecraft/src/GuiMainMenu.func_98060_b(Lnet/minecraft/src/StringTranslate;II)V=|p_98060_1_,p_98060_2_,p_98060_3_
net/minecraft/src/GuiMainMenu.func_98061_a(Lnet/minecraft/src/GuiMainMenu;Lnet/minecraft/src/StringTranslate;II)V=|p_98061_0_,p_98061_1_,p_98061_2_,p_98061_3_
net/minecraft/src/GuiMemoryErrorScreen.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiMemoryErrorScreen.func_73869_a(CI)V=|p_73869_1_,p_73869_2_
net/minecraft/src/GuiMemoryErrorScreen.func_73875_a(Lnet/minecraft/src/GuiButton;)V=|p_73875_1_
@@ -4149,19 +4168,13 @@ net/minecraft/src/GuiScreenConfigureWorld.func_96274_a(Lnet/minecraft/src/GuiScr
net/minecraft/src/GuiScreenConfirmation.<init>(Lnet/minecraft/src/GuiScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V=|p_i10019_1_,p_i10019_2_,p_i10019_3_,p_i10019_4_,p_i10019_5_
net/minecraft/src/GuiScreenConfirmation.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiScreenCreateOnlineWorld.<init>(Lnet/minecraft/src/GuiScreen;)V=|p_i10010_1_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_96246_c(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;)Lnet/minecraft/client/Minecraft;=|p_96246_0_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_96247_b(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;)Lnet/minecraft/src/GuiScreen;=|p_96247_0_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_73864_a(III)V=|p_73864_1_,p_73864_2_,p_73864_3_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_73869_a(CI)V=|p_73869_1_,p_73869_2_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_73875_a(Lnet/minecraft/src/GuiButton;)V=|p_73875_1_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_96246_c(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;)Lnet/minecraft/client/Minecraft;=|p_96246_0_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_96247_b(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;)Lnet/minecraft/src/GuiScreen;=|p_96247_0_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_96248_a(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;)Lnet/minecraft/client/Minecraft;=|p_96248_0_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_96251_a(Lnet/minecraft/src/Location;Ljava/lang/String;Ljava/lang/String;)V=|p_96251_1_,p_96251_2_,p_96251_3_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_98099_d(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;)Lnet/minecraft/client/Minecraft;=|p_98099_0_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_98100_a(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;Lnet/minecraft/src/Location;)Lnet/minecraft/src/Location;=|p_98100_0_,p_98100_1_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_98101_b(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;)Lnet/minecraft/src/Location;=|p_98101_0_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_98102_a(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;Ljava/util/List;)Ljava/util/List;=|p_98102_0_,p_98102_1_
net/minecraft/src/GuiScreenCreateOnlineWorld.func_98103_c(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;)Ljava/util/List;=|p_98103_0_
net/minecraft/src/GuiScreenDemo.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiScreenDemo.func_73875_a(Lnet/minecraft/src/GuiButton;)V=|p_73875_1_
net/minecraft/src/GuiScreenDisconnectedOnline.<init>(Lnet/minecraft/src/GuiScreen;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V=|p_i11007_1_,p_i11007_2_,p_i11007_3_,p_i11007_4_
@@ -4186,18 +4199,27 @@ net/minecraft/src/GuiScreenLongRunningTask.func_73875_a(Lnet/minecraft/src/GuiBu
net/minecraft/src/GuiScreenLongRunningTask.func_96209_a(Ljava/lang/String;)V=|p_96209_1_
net/minecraft/src/GuiScreenLongRunningTask.func_96210_b(Ljava/lang/String;)V=|p_96210_1_
net/minecraft/src/GuiScreenOnlineServers.<init>(Lnet/minecraft/src/GuiScreen;)V=|p_i10007_1_
net/minecraft/src/GuiScreenOnlineServers.func_101000_n(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_101000_0_
net/minecraft/src/GuiScreenOnlineServers.func_98079_k(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_98079_0_
net/minecraft/src/GuiScreenOnlineServers.func_101001_e(IIII)V=|p_101001_1_,p_101001_2_,p_101001_3_,p_101001_4_
net/minecraft/src/GuiScreenOnlineServers.func_101002_a(Lnet/minecraft/src/GuiScreenOnlineServers;Lnet/minecraft/src/McoServer;)V=java/io/IOException|p_101002_0_,p_101002_1_
net/minecraft/src/GuiScreenOnlineServers.func_101003_a(Lnet/minecraft/src/GuiScreenOnlineServers;IIII)V=|p_101003_0_,p_101003_1_,p_101003_2_,p_101003_3_,p_101003_4_
net/minecraft/src/GuiScreenOnlineServers.func_101004_o(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/client/Minecraft;=|p_101004_0_
net/minecraft/src/GuiScreenOnlineServers.func_101005_j(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_101005_0_
net/minecraft/src/GuiScreenOnlineServers.func_101006_d(IIII)V=|p_101006_1_,p_101006_2_,p_101006_3_,p_101006_4_
net/minecraft/src/GuiScreenOnlineServers.func_101008_c(IIII)V=|p_101008_1_,p_101008_2_,p_101008_3_,p_101008_4_
net/minecraft/src/GuiScreenOnlineServers.func_101009_c(Lnet/minecraft/src/GuiScreenOnlineServers;IIII)V=|p_101009_0_,p_101009_1_,p_101009_2_,p_101009_3_,p_101009_4_
net/minecraft/src/GuiScreenOnlineServers.func_101011_a(Lnet/minecraft/src/GuiScreenOnlineServers;Ljava/lang/String;)Ljava/lang/String;=|p_101011_0_,p_101011_1_
net/minecraft/src/GuiScreenOnlineServers.func_101012_b(Lnet/minecraft/src/GuiScreenOnlineServers;IIII)V=|p_101012_0_,p_101012_1_,p_101012_2_,p_101012_3_,p_101012_4_
net/minecraft/src/GuiScreenOnlineServers.func_102018_a(J)V=|p_102018_1_
net/minecraft/src/GuiScreenOnlineServers.func_101011_a(Lnet/minecraft/src/GuiScreenOnlineServers;Ljava/lang/String;)Ljava/lang/String;=|p_101011_0_,p_101011_1_
net/minecraft/src/GuiScreenOnlineServers.func_98074_m(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_98074_0_
net/minecraft/src/GuiScreenOnlineServers.func_98087_l(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_98087_0_
net/minecraft/src/GuiScreenOnlineServers.func_101004_o(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/client/Minecraft;=|p_101004_0_
net/minecraft/src/GuiScreenOnlineServers.func_104030_a(Lnet/minecraft/src/GuiScreenOnlineServers;IIIII)V=|p_104030_0_,p_104030_1_,p_104030_2_,p_104030_3_,p_104030_4_,p_104030_5_
net/minecraft/src/GuiScreenOnlineServers.func_104031_c(Lnet/minecraft/src/GuiScreenOnlineServers;IIII)V=|p_104031_0_,p_104031_1_,p_104031_2_,p_104031_3_,p_104031_4_
net/minecraft/src/GuiScreenOnlineServers.func_104032_j(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/client/Minecraft;=|p_104032_0_
net/minecraft/src/GuiScreenOnlineServers.func_101000_n(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_101000_0_
net/minecraft/src/GuiScreenOnlineServers.func_101002_a(Lnet/minecraft/src/GuiScreenOnlineServers;Lnet/minecraft/src/McoServer;)V=java/io/IOException|p_101002_0_,p_101002_1_
net/minecraft/src/GuiScreenOnlineServers.func_98091_h(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/client/Minecraft;=|p_98091_0_
net/minecraft/src/GuiScreenOnlineServers.func_104038_i(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_104038_0_
net/minecraft/src/GuiScreenOnlineServers.func_104039_b(IIIII)V=|p_104039_1_,p_104039_2_,p_104039_3_,p_104039_4_,p_104039_5_
net/minecraft/src/GuiScreenOnlineServers.func_98084_i(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_98084_0_
net/minecraft/src/GuiScreenOnlineServers.func_101005_j(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_101005_0_
net/minecraft/src/GuiScreenOnlineServers.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiScreenOnlineServers.func_73869_a(CI)V=|p_73869_1_,p_73869_2_
net/minecraft/src/GuiScreenOnlineServers.func_73875_a(Lnet/minecraft/src/GuiButton;)V=|p_73875_1_
@@ -4207,19 +4229,17 @@ net/minecraft/src/GuiScreenOnlineServers.func_96165_a(Ljava/lang/String;II)V=|p_
net/minecraft/src/GuiScreenOnlineServers.func_96174_a(Lnet/minecraft/src/McoServer;)V=java/io/IOException|p_96174_1_
net/minecraft/src/GuiScreenOnlineServers.func_96177_a(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/client/Minecraft;=|p_96177_0_
net/minecraft/src/GuiScreenOnlineServers.func_98072_d(Lnet/minecraft/src/GuiScreenOnlineServers;)I=|p_98072_0_
net/minecraft/src/GuiScreenOnlineServers.func_98074_m(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_98074_0_
net/minecraft/src/GuiScreenOnlineServers.func_98075_b(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/client/Minecraft;=|p_98075_0_
net/minecraft/src/GuiScreenOnlineServers.func_98076_f(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/client/Minecraft;=|p_98076_0_
net/minecraft/src/GuiScreenOnlineServers.func_98078_c(Lnet/minecraft/src/GuiScreenOnlineServers;I)V=|p_98078_0_,p_98078_1_
net/minecraft/src/GuiScreenOnlineServers.func_98079_k(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_98079_0_
net/minecraft/src/GuiScreenOnlineServers.func_98081_a(Lnet/minecraft/src/GuiScreenOnlineServers;I)I=|p_98081_0_,p_98081_1_
net/minecraft/src/GuiScreenOnlineServers.func_98084_i(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_98084_0_
net/minecraft/src/GuiScreenOnlineServers.func_98086_a(J)Lnet/minecraft/src/McoServer;=|p_98086_1_
net/minecraft/src/GuiScreenOnlineServers.func_98087_l(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_98087_0_
net/minecraft/src/GuiScreenOnlineServers.func_98089_b(Lnet/minecraft/src/GuiScreenOnlineServers;I)I=|p_98089_0_,p_98089_1_
net/minecraft/src/GuiScreenOnlineServers.func_98091_h(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_98091_0_
net/minecraft/src/GuiScreenOnlineServers.func_98092_g(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/GuiButton;=|p_98092_0_
net/minecraft/src/GuiScreenOnlineServers.func_98094_c(Lnet/minecraft/src/GuiScreenOnlineServers;)Ljava/util/List;=|p_98094_0_
net/minecraft/src/GuiScreenOnlineServersSubscreen.<init>(IIII)V=|p_i23000_1_,p_i23000_2_,p_i23000_3_,p_i23000_4_
net/minecraft/src/GuiScreenOnlineServersSubscreen.func_104069_a(Lnet/minecraft/src/GuiButton;)V=|p_104069_1_
net/minecraft/src/GuiScreenOnlineServersSubscreen.func_104071_a(Lnet/minecraft/src/GuiScreen;Lnet/minecraft/src/FontRenderer;)V=|p_104071_1_,p_104071_2_
net/minecraft/src/GuiScreenResetWorld.<init>(Lnet/minecraft/src/GuiScreen;Lnet/minecraft/src/McoServer;)V=|p_i10003_1_,p_i10003_2_
net/minecraft/src/GuiScreenResetWorld.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiScreenResetWorld.func_73864_a(III)V=|p_73864_1_,p_73864_2_,p_73864_3_
@@ -4227,16 +4247,14 @@ net/minecraft/src/GuiScreenResetWorld.func_73869_a(CI)V=|p_73869_1_,p_73869_2_
net/minecraft/src/GuiScreenResetWorld.func_73875_a(Lnet/minecraft/src/GuiButton;)V=|p_73875_1_
net/minecraft/src/GuiScreenResetWorld.func_96147_b(Lnet/minecraft/src/GuiScreenResetWorld;)Lnet/minecraft/client/Minecraft;=|p_96147_0_
net/minecraft/src/GuiScreenResetWorld.func_96148_a(Lnet/minecraft/src/GuiScreenResetWorld;)Lnet/minecraft/src/GuiScreen;=|p_96148_0_
net/minecraft/src/GuiScreenSelectLocation.<init>(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;Ljava/util/List;Lnet/minecraft/src/Location;Ljava/lang/String;Ljava/lang/String;)V=|p_i10005_1_,p_i10005_2_,p_i10005_3_,p_i10005_4_,p_i10005_5_
net/minecraft/src/GuiScreenSelectLocation.<init>(Lnet/minecraft/client/Minecraft;IIIII)V=|p_i23001_1_,p_i23001_2_,p_i23001_3_,p_i23001_4_,p_i23001_5_,p_i23001_6_
net/minecraft/src/GuiScreenSelectLocation.func_104083_b(IIII)V=|p_104083_1_,p_104083_2_,p_104083_3_,p_104083_4_
net/minecraft/src/GuiScreenSelectLocation.func_104084_a(IIII)V=|p_104084_1_,p_104084_2_,p_104084_3_,p_104084_4_
net/minecraft/src/GuiScreenSelectLocation.func_104087_b(II)V=|p_104087_1_,p_104087_2_
net/minecraft/src/GuiScreenSelectLocation.func_104088_a(IILnet/minecraft/src/Tessellator;)V=|p_104088_1_,p_104088_2_,p_104088_3_
net/minecraft/src/GuiScreenSelectLocation.func_104089_a(II)V=|p_104089_1_,p_104089_2_
net/minecraft/src/GuiScreenSelectLocation.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiScreenSelectLocation.func_73875_a(Lnet/minecraft/src/GuiButton;)V=|p_73875_1_
net/minecraft/src/GuiScreenSelectLocation.func_96230_c(Lnet/minecraft/src/GuiScreenSelectLocation;)Lnet/minecraft/src/GuiSmallButton;=|p_96230_0_
net/minecraft/src/GuiScreenSelectLocation.func_96231_e(Lnet/minecraft/src/GuiScreenSelectLocation;)Lnet/minecraft/src/FontRenderer;=|p_96231_0_
net/minecraft/src/GuiScreenSelectLocation.func_96232_a(Lnet/minecraft/src/GuiScreenSelectLocation;)Lnet/minecraft/client/Minecraft;=|p_96232_0_
net/minecraft/src/GuiScreenSelectLocation.func_96233_d(Lnet/minecraft/src/GuiScreenSelectLocation;)Lnet/minecraft/src/Location;=|p_96233_0_
net/minecraft/src/GuiScreenSelectLocation.func_96234_a(Lnet/minecraft/src/GuiScreenSelectLocation;Lnet/minecraft/src/Location;)Lnet/minecraft/src/Location;=|p_96234_0_,p_96234_1_
net/minecraft/src/GuiScreenSelectLocation.func_96235_f(Lnet/minecraft/src/GuiScreenSelectLocation;)Lnet/minecraft/src/FontRenderer;=|p_96235_0_
net/minecraft/src/GuiScreenSelectLocation.func_96236_b(Lnet/minecraft/src/GuiScreenSelectLocation;)Ljava/util/List;=|p_96236_0_
net/minecraft/src/GuiScreenServerList.<init>(Lnet/minecraft/src/GuiScreen;Lnet/minecraft/src/ServerData;)V=|p_i3066_1_,p_i3066_2_
net/minecraft/src/GuiScreenServerList.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiScreenServerList.func_73864_a(III)V=|p_73864_1_,p_73864_2_,p_73864_3_
@@ -4297,6 +4315,7 @@ net/minecraft/src/GuiSlotLanguage.func_77213_a(IZ)V=|p_77213_1_,p_77213_2_
net/minecraft/src/GuiSlotLanguage.func_77214_a(IIIILnet/minecraft/src/Tessellator;)V=|p_77214_1_,p_77214_2_,p_77214_3_,p_77214_4_,p_77214_5_
net/minecraft/src/GuiSlotLanguage.func_77218_a(I)Z=|p_77218_1_
net/minecraft/src/GuiSlotOnlineServerList.<init>(Lnet/minecraft/src/GuiScreenOnlineServers;)V=|p_i10004_1_
net/minecraft/src/GuiSlotOnlineServerList.func_104086_b(I)Z=|p_104086_1_
net/minecraft/src/GuiSlotOnlineServerList.func_77213_a(IZ)V=|p_77213_1_,p_77213_2_
net/minecraft/src/GuiSlotOnlineServerList.func_77214_a(IIIILnet/minecraft/src/Tessellator;)V=|p_77214_1_,p_77214_2_,p_77214_3_,p_77214_4_,p_77214_5_
net/minecraft/src/GuiSlotOnlineServerList.func_77218_a(I)Z=|p_77218_1_
@@ -4436,6 +4455,7 @@ net/minecraft/src/GuiYesNo.<init>(Lnet/minecraft/src/GuiScreen;Ljava/lang/String
net/minecraft/src/GuiYesNo.<init>(Lnet/minecraft/src/GuiScreen;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V=|p_i3048_1_,p_i3048_2_,p_i3048_3_,p_i3048_4_,p_i3048_5_,p_i3048_6_
net/minecraft/src/GuiYesNo.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiYesNo.func_73875_a(Lnet/minecraft/src/GuiButton;)V=|p_73875_1_
net/minecraft/src/HttpUtil.func_104145_a(Ljava/net/URL;)Ljava/lang/String;=java/io/IOException|p_104145_0_
net/minecraft/src/HttpUtil.func_76179_a(Ljava/util/Map;)Ljava/lang/String;=|p_76179_0_
net/minecraft/src/HttpUtil.func_76180_a(Lnet/minecraft/src/ILogAgent;Ljava/net/URL;Ljava/lang/String;Z)Ljava/lang/String;=|p_76180_0_,p_76180_1_,p_76180_2_,p_76180_3_
net/minecraft/src/HttpUtil.func_76181_a()I=java/io/IOException|
@@ -4936,9 +4956,6 @@ net/minecraft/src/LoadingScreenRenderer.func_73719_c(Ljava/lang/String;)V=|p_737
net/minecraft/src/LoadingScreenRenderer.func_73720_a(Ljava/lang/String;)V=|p_73720_1_
net/minecraft/src/LoadingScreenRenderer.func_73721_b(Ljava/lang/String;)V=|p_73721_1_
net/minecraft/src/LoadingScreenRenderer.func_73722_d(Ljava/lang/String;)V=|p_73722_1_
net/minecraft/src/Location.func_98167_a(Largo/jdom/JsonNode;)Lnet/minecraft/src/Location;=|p_98167_0_
net/minecraft/src/Location.func_98168_a(Largo/jdom/JsonNode;Ljava/lang/String;)Lnet/minecraft/src/Location;=|p_98168_0_,p_98168_1_
net/minecraft/src/Locations.func_98174_a(Ljava/lang/String;)Lnet/minecraft/src/Locations;=|p_98174_0_
net/minecraft/src/LogAgent.<init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V=|p_i11036_1_,p_i11036_2_,p_i11036_3_
net/minecraft/src/LogAgent.func_98076_a()Ljava/util/logging/Logger;=|
net/minecraft/src/LogAgent.func_98230_d(Ljava/lang/String;)V=|p_98230_1_
@@ -5059,7 +5076,7 @@ net/minecraft/src/MathHelper.func_82716_a(Ljava/util/Random;DD)D=|p_82716_0_,p_8
net/minecraft/src/McoClient.<init>(Lnet/minecraft/src/Session;)V=|p_i20001_1_
net/minecraft/src/McoClient.func_96374_a(J)Lnet/minecraft/src/McoServerAddress;=net/minecraft/src/ExceptionMcoService,java/io/IOException|p_96374_1_
net/minecraft/src/McoClient.func_96375_b()Ljava/lang/Boolean;=net/minecraft/src/ExceptionMcoService,java/io/IOException|
net/minecraft/src/McoClient.func_96376_d(J)Ljava/lang/Boolean;=net/minecraft/src/ExceptionMcoService,java/io/IOException|p_96376_1_
net/minecraft/src/McoClient.func_96376_d(JLjava/lang/String;)Ljava/lang/Boolean;=net/minecraft/src/ExceptionMcoService,java/io/UnsupportedEncodingException|p_96376_1_,p_96376_3_
net/minecraft/src/McoClient.func_96377_a(Lnet/minecraft/src/Request;)Ljava/lang/String;=net/minecraft/src/ExceptionMcoService|p_96377_1_
net/minecraft/src/McoClient.func_96378_c(J)Ljava/lang/Boolean;=net/minecraft/src/ExceptionMcoService,java/io/IOException|p_96378_1_
net/minecraft/src/McoClient.func_96379_c()I=net/minecraft/src/ExceptionMcoService|
@@ -5067,9 +5084,8 @@ net/minecraft/src/McoClient.func_96380_a(Ljava/lang/String;)Ljava/lang/String;=j
net/minecraft/src/McoClient.func_96381_a(JLjava/lang/String;)V=net/minecraft/src/ExceptionMcoService|p_96381_1_,p_96381_3_
net/minecraft/src/McoClient.func_96382_a()Lnet/minecraft/src/ValueObjectList;=net/minecraft/src/ExceptionMcoService|
net/minecraft/src/McoClient.func_96383_b(J)Ljava/lang/Boolean;=net/minecraft/src/ExceptionMcoService,java/io/IOException|p_96383_1_
net/minecraft/src/McoClient.func_96384_a(JLjava/lang/String;Ljava/lang/String;)V=net/minecraft/src/ExceptionMcoService,java/io/UnsupportedEncodingException|p_96384_1_,p_96384_3_,p_96384_4_
net/minecraft/src/McoClient.func_96385_d()Lnet/minecraft/src/Locations;=net/minecraft/src/ExceptionMcoService,java/io/IOException|
net/minecraft/src/McoClient.func_96386_a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V=java/io/IOException,net/minecraft/src/ExceptionMcoService,java/io/UnsupportedEncodingException|p_96386_1_,p_96386_2_,p_96386_3_
net/minecraft/src/McoClient.func_96384_a(JLjava/lang/String;Ljava/lang/String;II)V=net/minecraft/src/ExceptionMcoService,java/io/UnsupportedEncodingException|p_96384_1_,p_96384_3_,p_96384_4_,p_96384_5_,p_96384_6_
net/minecraft/src/McoClient.func_96386_a(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V=net/minecraft/src/ExceptionMcoService,java/io/UnsupportedEncodingException|p_96386_1_,p_96386_2_,p_96386_3_,p_96386_4_
net/minecraft/src/McoClient.func_96387_b(JLjava/lang/String;)Lnet/minecraft/src/McoServer;=net/minecraft/src/ExceptionMcoService,java/io/IOException|p_96387_1_,p_96387_3_
net/minecraft/src/McoClient.func_98176_a(J)Lnet/minecraft/src/McoServer;=net/minecraft/src/ExceptionMcoService,java/io/IOException|p_98176_1_
net/minecraft/src/McoClient.func_98177_f(J)Lnet/minecraft/src/ValueObjectSubscription;=net/minecraft/src/ExceptionMcoService,java/io/IOException|p_98177_1_
@@ -6594,6 +6610,7 @@ net/minecraft/src/RenderZombie.func_82430_a(Lnet/minecraft/src/EntityZombie;FFF)
net/minecraft/src/ReportedException.<init>(Lnet/minecraft/src/CrashReport;)V=|p_i3253_1_
net/minecraft/src/Request.<init>(Ljava/lang/String;II)V=|p_i10026_1_,p_i10026_2_,p_i10026_3_
net/minecraft/src/Request.func_100006_a(Ljava/lang/String;Ljava/lang/String;)V=|p_100006_1_,p_100006_2_
net/minecraft/src/Request.func_104064_a(Ljava/lang/String;Ljava/lang/String;II)Lnet/minecraft/src/Request;=|p_104064_0_,p_104064_1_,p_104064_2_,p_104064_3_
net/minecraft/src/Request.func_96352_a(Ljava/io/InputStream;)Ljava/lang/String;=java/io/IOException|p_96352_1_
net/minecraft/src/Request.func_96353_a(Ljava/lang/String;Ljava/lang/String;II)Lnet/minecraft/src/Request;=|p_96353_0_,p_96353_1_,p_96353_2_,p_96353_3_
net/minecraft/src/Request.func_96355_b(Ljava/lang/String;)Lnet/minecraft/src/Request;=|p_96355_0_
@@ -6604,6 +6621,7 @@ net/minecraft/src/RequestDelete.<init>(Ljava/lang/String;II)V=|p_i10031_1_,p_i10
net/minecraft/src/RequestGet.<init>(Ljava/lang/String;II)V=|p_i10030_1_,p_i10030_2_,p_i10030_3_
net/minecraft/src/RequestPost.<init>(Ljava/lang/String;[BII)V=|p_i10027_1_,p_i10027_2_,p_i10027_3_,p_i10027_4_
net/minecraft/src/RequestPut.<init>(Ljava/lang/String;[BII)V=|p_i10029_1_,p_i10029_2_,p_i10029_3_,p_i10029_4_
net/minecraft/src/RunnableTitleScreen.<init>(Lnet/minecraft/src/GuiMainMenu;)V=|p_i23005_1_
net/minecraft/src/SaveFormatComparator.<init>(Ljava/lang/String;Ljava/lang/String;JJLnet/minecraft/src/EnumGameType;ZZZ)V=|p_i3917_1_,p_i3917_2_,p_i3917_3_,p_i3917_5_,p_i3917_7_,p_i3917_8_,p_i3917_9_,p_i3917_10_
net/minecraft/src/SaveFormatComparator.compareTo(Ljava/lang/Object;)I=|p_compareTo_1_
net/minecraft/src/SaveFormatComparator.func_75787_a(Lnet/minecraft/src/SaveFormatComparator;)I=|p_75787_1_
@@ -6705,10 +6723,6 @@ net/minecraft/src/SelectionListInvited.func_96609_a(I)Z=|p_96609_1_
net/minecraft/src/SelectionListInvited.func_96610_a(IIIILnet/minecraft/src/Tessellator;)V=|p_96610_1_,p_96610_2_,p_96610_3_,p_96610_4_,p_96610_5_
net/minecraft/src/SelectionListInvited.func_96615_a(IZ)V=|p_96615_1_,p_96615_2_
net/minecraft/src/SelectionListInvited.func_98263_b(IIIILnet/minecraft/src/Tessellator;)V=|p_98263_1_,p_98263_2_,p_98263_3_,p_98263_4_,p_98263_5_
net/minecraft/src/SelectionListLocation.<init>(Lnet/minecraft/src/GuiScreenSelectLocation;)V=|p_i10002_1_
net/minecraft/src/SelectionListLocation.func_77213_a(IZ)V=|p_77213_1_,p_77213_2_
net/minecraft/src/SelectionListLocation.func_77214_a(IIIILnet/minecraft/src/Tessellator;)V=|p_77214_1_,p_77214_2_,p_77214_3_,p_77214_4_,p_77214_5_
net/minecraft/src/SelectionListLocation.func_77218_a(I)Z=|p_77218_1_
net/minecraft/src/ServerAddress.<init>(Ljava/lang/String;I)V=|p_i3096_1_,p_i3096_2_
net/minecraft/src/ServerAddress.func_78860_a(Ljava/lang/String;)Lnet/minecraft/src/ServerAddress;=|p_78860_0_
net/minecraft/src/ServerAddress.func_78862_a(Ljava/lang/String;I)I=|p_78862_0_,p_78862_1_
@@ -7074,8 +7088,8 @@ net/minecraft/src/TaskOnlineConnect.func_96580_a(Lnet/minecraft/src/TaskOnlineCo
net/minecraft/src/TaskOnlineConnect.func_96582_a(Ljava/lang/String;I)V=|p_96582_1_,p_96582_2_
net/minecraft/src/TaskOnlineConnect.func_96583_a(Lnet/minecraft/src/TaskOnlineConnect;Lnet/minecraft/src/NetClientHandler;)Lnet/minecraft/src/NetClientHandler;=|p_96583_0_,p_96583_1_
net/minecraft/src/TaskOnlineConnect.func_98172_a(Lnet/minecraft/src/TaskOnlineConnect;)Lnet/minecraft/src/GuiScreen;=|p_98172_0_
net/minecraft/src/TaskResetWorld.<init>(Lnet/minecraft/src/GuiScreenResetWorld;J)V=|p_i10011_1_,p_i10011_2_
net/minecraft/src/TaskWorldCreation.<init>(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V=|p_i10017_1_,p_i10017_2_,p_i10017_3_,p_i10017_4_
net/minecraft/src/TaskResetWorld.<init>(Lnet/minecraft/src/GuiScreenResetWorld;JLjava/lang/String;)V=|p_i23002_1_,p_i23002_2_,p_i23002_4_
net/minecraft/src/TaskWorldCreation.<init>(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V=|p_i23003_1_,p_i23003_2_,p_i23003_3_,p_i23003_4_,p_i23003_5_
net/minecraft/src/TcpConnection.<init>(Lnet/minecraft/src/ILogAgent;Ljava/net/Socket;Ljava/lang/String;Lnet/minecraft/src/NetHandler;)V=java/io/IOException|p_i11026_1_,p_i11026_2_,p_i11026_3_,p_i11026_4_
net/minecraft/src/TcpConnection.<init>(Lnet/minecraft/src/ILogAgent;Ljava/net/Socket;Ljava/lang/String;Lnet/minecraft/src/NetHandler;Ljava/security/PrivateKey;)V=java/io/IOException|p_i11027_1_,p_i11027_2_,p_i11027_3_,p_i11027_4_,p_i11027_5_
net/minecraft/src/TcpConnection.func_74424_a(Ljava/lang/String;[Ljava/lang/Object;)V=|p_74424_1_,p_74424_2_
@@ -7122,6 +7136,7 @@ net/minecraft/src/Tessellator.func_78386_a(FFF)V=|p_78386_1_,p_78386_2_,p_78386_
net/minecraft/src/Texture.<init>(Ljava/lang/String;IIIIIIII)V=|p_i11021_1_,p_i11021_2_,p_i11021_3_,p_i11021_4_,p_i11021_5_,p_i11021_6_,p_i11021_7_,p_i11021_8_,p_i11021_9_
net/minecraft/src/Texture.<init>(Ljava/lang/String;IIIIIIIILjava/awt/image/BufferedImage;)V=|p_i11023_1_,p_i11023_2_,p_i11023_3_,p_i11023_4_,p_i11023_5_,p_i11023_6_,p_i11023_7_,p_i11023_8_,p_i11023_9_,p_i11023_10_
net/minecraft/src/Texture.<init>(Ljava/lang/String;IIIIIIILjava/awt/image/BufferedImage;)V=|p_i11022_1_,p_i11022_2_,p_i11022_3_,p_i11022_4_,p_i11022_5_,p_i11022_6_,p_i11022_7_,p_i11022_8_,p_i11022_9_
net/minecraft/src/Texture.func_104062_b(IILnet/minecraft/src/Texture;)V=|p_104062_1_,p_104062_2_,p_104062_3_
net/minecraft/src/Texture.func_94272_a(Lnet/minecraft/src/Rect2i;I)V=|p_94272_1_,p_94272_2_
net/minecraft/src/Texture.func_94277_a(I)V=|p_94277_1_
net/minecraft/src/Texture.func_94278_a(Ljava/awt/image/BufferedImage;)V=|p_94278_1_
@@ -7181,7 +7196,6 @@ net/minecraft/src/TexturedQuad.func_78236_a(Lnet/minecraft/src/Tessellator;F)V=|
net/minecraft/src/ThreadClientSleep.<init>(Lnet/minecraft/client/Minecraft;Ljava/lang/String;)V=|p_i3019_1_,p_i3019_2_
net/minecraft/src/ThreadConnectToOnlineServer.<init>(Lnet/minecraft/src/GuiSlotOnlineServerList;Lnet/minecraft/src/McoServer;)V=|p_i10009_1_,p_i10009_2_
net/minecraft/src/ThreadConnectToServer.<init>(Lnet/minecraft/src/GuiConnecting;Ljava/lang/String;I)V=|p_i3110_1_,p_i3110_2_,p_i3110_3_
net/minecraft/src/ThreadCreateOnlineWorldScreen.<init>(Lnet/minecraft/src/GuiScreenCreateOnlineWorld;)V=|p_i11008_1_
net/minecraft/src/ThreadDedicatedServer.<init>(Lnet/minecraft/src/DedicatedServer;)V=|p_i11000_1_
net/minecraft/src/ThreadDedicatedServer.run()V=|
net/minecraft/src/ThreadDownloadImage.<init>(Lnet/minecraft/src/ThreadDownloadImageData;Ljava/lang/String;Lnet/minecraft/src/IImageBuffer;)V=|p_i5000_1_,p_i5000_2_,p_i5000_3_
@@ -7541,7 +7555,6 @@ net/minecraft/src/World.func_72900_e(Lnet/minecraft/src/Entity;)V=|p_72900_1_
net/minecraft/src/World.func_72901_a(Lnet/minecraft/src/Vec3;Lnet/minecraft/src/Vec3;Z)Lnet/minecraft/src/MovingObjectPosition;=|p_72901_1_,p_72901_2_,p_72901_3_
net/minecraft/src/World.func_72902_n(III)V=|p_72902_1_,p_72902_2_,p_72902_3_
net/minecraft/src/World.func_72904_c(IIIIII)Z=|p_72904_1_,p_72904_2_,p_72904_3_,p_72904_4_,p_72904_5_,p_72904_6_
net/minecraft/src/World.func_72906_B()V=net/minecraft/src/MinecraftException|
net/minecraft/src/World.func_72907_a(Ljava/lang/Class;)I=|p_72907_1_
net/minecraft/src/World.func_72908_a(DDDLjava/lang/String;FF)V=|p_72908_1_,p_72908_3_,p_72908_5_,p_72908_7_,p_72908_8_,p_72908_9_
net/minecraft/src/World.func_72909_d(IIIIII)V=|p_72909_1_,p_72909_2_,p_72909_3_,p_72909_4_,p_72909_5_,p_72909_6_
@@ -7600,6 +7613,7 @@ net/minecraft/src/World.func_72980_b(DDDLjava/lang/String;FFZ)V=|p_72980_1_,p_72
net/minecraft/src/World.func_82733_a(Ljava/lang/Class;Lnet/minecraft/src/AxisAlignedBB;Lnet/minecraft/src/IEntitySelector;)Ljava/util/List;=|p_82733_1_,p_82733_2_,p_82733_3_
net/minecraft/src/World.func_82734_g(II)I=|p_82734_1_,p_82734_2_
net/minecraft/src/World.func_82735_a(Lnet/minecraft/src/EntityMinecart;)Lnet/minecraft/src/IUpdatePlayerListBox;=|p_82735_1_
net/minecraft/src/World.func_72906_B()V=net/minecraft/src/MinecraftException|
net/minecraft/src/World.func_82738_a(J)V=|p_82738_1_
net/minecraft/src/World.func_82739_e(IIIII)V=|p_82739_1_,p_82739_2_,p_82739_3_,p_82739_4_,p_82739_5_
net/minecraft/src/World.func_82740_a(IIIIII)V=|p_82740_1_,p_82740_2_,p_82740_3_,p_82740_4_,p_82740_5_,p_82740_6_
+3160 -3105
View File
File diff suppressed because it is too large. Load diff
+17 -11
View File
@@ -34,12 +34,12 @@ ReobfClientSrg = %(DirTemp)s/client_ro_srg.srg
ReobfServerSrg = %(DirTemp)s/server_ro_srg.srg
[JAR]
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 = 5c1219d869b87d233de3033688ec7567
MD5Server = 9d31b969c3f197a1d40381d5620717ea
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
[RETROGUARD]
Location = %(DirRuntime)s/bin/retroguard.jar
@@ -71,6 +71,8 @@ ClsServerTemp = %(DirTempCls)s/minecraft_server
SrcClientTemp = %(DirTempSrc)s/minecraft
SrcServerTemp = %(DirTempSrc)s/minecraft_server
FFSource = net
FFClientIn = %(DirTemp)s/minecraft_ff_in.jar
FFServerIn = %(DirTemp)s/minecraft_server_ff_in.jar
[OUTPUT]
BinClientTemp = %(DirTempBin)s/minecraft
@@ -94,11 +96,11 @@ BinClient = %(DirBin)s/minecraft
BinServer = %(DirBin)s/minecraft_server
LogClient = %(DirLogs)s/client_compile.log
LogServer = %(DirLogs)s/server_compile.log
ClassPathClient = %(DirLib)s/,%(DirLib)s/*,%(DirJars)s/bin/minecraft.jar,%(DirJars)s/bin/jinput.jar,%(DirJars)s/bin/lwjgl.jar,%(DirJars)s/bin/lwjgl_util.jar
ClassPathServer = %(DirLib)s/,%(DirLib)s/*,%(DirJars)s/minecraft_server.jar
ClassPathClient = %(DirLib)s/,%(DirLib)s/*,%(DirJars)s/versions/1.6/1.6.jar
ClassPathServer = %(DirLib)s/,%(DirLib)s/*,%(DirJars)s/minecraft_server.1.6.jar
ClientFixes = %(DirConf)s/patches
FixStart = Start
IgnorePkg = paulscode,com/jcraft,isom,ibxm,de/matthiasmann/twl,org/xmlpull,javax/xml,com/fasterxml,javax/ws,org/bouncycastle,argo
IgnorePkg = paulscode,com,isom,ibxm,de/matthiasmann/twl,org,javax/xml,javax/ws,argo
[REOBF]
MD5Client = %(DirTemp)s/client.md5
@@ -125,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 = 102000
ParamIndex = 22000
RGIndex = 130000
ParamIndex = 30000
[ASTYLE]
AstyleConfig = %(DirConf)s/astyle.cfg
@@ -144,14 +146,18 @@ AStyle_osx = %(DirRuntime)s/bin/astyle-osx
JadRetro = %(DirRuntime)s/bin/jadretro.jar
Fernflower = %(DirRuntime)s/bin/fernflower.jar
Exceptor = %(DirRuntime)s/bin/mcinjector.jar
SpecialSource = %(DirRuntime)s/bin/specialsource.jar
CmdPatch = %s -p1 -u -i {patchfile} -d {srcdir}
CmdJad = %s -b -d {outdir} -dead -o -r -s .java -stat -ff {classes}
CmdAStyle = %s --suffix=none --quiet --options={conffile} {classes}
CmdRG = %s -cp "{classpath}" RetroGuard -searge {conffile}
CmdRGReobf = %s -cp "{classpath}" RetroGuard -notch {conffile}
CmdSS = %s -cp "{classpath}" -jar %s -i {injar} -o {outjar} -m {mapfile} --kill-source
CmdSSReobf = %s -cp "{classpath}" -jar %s -i {injar} -o {outjar} -r -m {mapfile} -d {identifier} -e %s
CmdJadretro = %s -jar %s {targetdir}
CmdFernflower = %s -Xmx512M -jar %s -din=0 -rbr=0 -dgs=1 -asc=1 -log=WARN {indir} {outdir}
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
+203 -26
View File
@@ -1,5 +1,14 @@
searge,name,side,desc
func_100008_d,isDurationMax,2,"Returns true if duration is at maximum, false otherwise."
func_100009_j_,getFacing,2,
func_100011_g,getIsPotionDurationMax,2,
func_100012_b,setPotionDurationMax,2,Toggle the isPotionDurationMax field.
func_100015_a,isKeyDown,2,Returns whether the specified key binding is currently being pressed.
func_102007_a,canInsertItem,2,"Returns true if automation can insert the given item in the given slot from the given side. Args: Slot, item, side"
func_102008_b,canExtractItem,2,"Returns true if automation can extract the given item in the given slot from the given side. Args: Slot, item, side"
func_102013_b,canExtractItemFromInventory,2,
func_102026_a,isBlockTopFacingSurfaceSolid,2,"Performs check to see if the block is a normal, solid block, or if the metadata of the block indicates that its facing puts its solid side upwards. (inverted stairs, for example)"
func_102028_d,isSplashPotionEffect,2,
func_70000_a,addServerStatsToSnooper,2,
func_70001_b,addServerTypeToSnooper,2,
func_70002_Q,isSnooperEnabled,2,Returns whether snooping is enabled or not.
@@ -447,7 +456,7 @@ func_70950_c,addDefaultEquipmentAndRecipies,2,"based on the villagers profession
func_70951_a,getRandomSizedStack,2,
func_70965_a,attackEntityFromPart,2,
func_70967_k,setNewTarget,2,Sets a new target for the flight AI. It can be a random coordinate or a nearby player.
func_70968_i,getDragonHealth,2,Returns the health points of the dragon.
func_70968_i,getBossHealth,2,Returns the health points of the dragon.
func_70969_j,updateDragonEnderCrystal,2,Updates the state of the enderdragon's current endercrystal.
func_70970_a,collideWithEntities,2,Pushes all entities inside the list away from the enderdragon.
func_70971_b,attackEntitiesInList,2,"Attacks all entities inside this list, dealing 5 hearts of damage."
@@ -629,7 +638,7 @@ func_71267_a,saveAllWorlds,2,par1 indicates if a log message should be output.
func_71268_U,getCanSpawnAnimals,2,
func_71269_o,setTexturePack,2,
func_71270_I,getFolderName,2,
func_71272_O,deleteWorldAndStopServer,2,WARNING : directly calls getActiveAnvilConverter().deleteWorldDirectory(theWorldServer[0].getSaveHandler().getSaveDirectoryName());
func_71272_O,deleteWorldAndStopServer,2,WARNING : directly calls getActiveAnvilConverter().deleteWorldDirectory(theWorldServer[0].getSaveHandler().getWorldDirectoryName());
func_71273_Y,getMOTD,2,
func_71274_v,getServerMOTD,2,Returns the server message of the day
func_71275_y,getMaxPlayers,2,Returns the maximum number of players allowed on the server.
@@ -792,7 +801,6 @@ func_71764_a,addPendingConnection,2,
func_71765_d,getMyPort,2,
func_71766_a,processPendingConnections,2,
func_71767_c,getInetAddress,2,
func_71770_b,isLocalHost,2,
func_71779_a,getIV,2,
func_71780_b,getParameters,2,
func_71783_a,getKey,2,
@@ -832,7 +840,7 @@ func_71854_d,canBlockStay,2,Can this block stay at this position. Similar to ca
func_71855_c,isProvidingStrongPower,2,"Returns true if the block is emitting direct/strong redstone power on the specified side. Args: World, X, Y, Z, side. Note that the side is reversed - eg it is 1 (up) when checking the bottom of the block."
func_71856_s_,getRenderBlockPass,2,Returns which pass should this block be rendered on. 0 for solids and 1 for alpha
func_71857_b,getRenderType,2,The type of render function that is called for this block
func_71858_a,getBlockTextureFromSideAndMetadata,2,"From the specified side and block metadata retrieves the blocks texture. Args: side, metadata"
func_71858_a,getIcon,2,"From the specified side and block metadata retrieves the blocks texture. Args: side, metadata"
func_71859_p_,tickRate,2,How many world ticks before ticking
func_71860_a,onBlockPlacedBy,2,Called when the block is placed in the world.
func_71861_g,onBlockAdded,2,"Called whenever the block is added into the world. Args: world, x, y, z"
@@ -1353,10 +1361,10 @@ func_72825_h,getTopSolidOrLiquidBlock,2,"Finds the highest block on the x, z coo
func_72826_c,getCelestialAngle,2,calls calculateCelestialAngle
func_72827_u,getProviderName,2,"Returns the name of the current chunk provider, by calling chunkprovider.makeString()"
func_72828_b,unloadEntities,2,Adds a list of entities to be unloaded on the next pass of World.updateEntities()
func_72829_c,isAABBNonEmpty,2,Returns true if there are any blocks in the region constrained by an AxisAlignedBB
func_72829_c,checkBlockCollision,2,Returns true if there are any blocks in the region constrained by an AxisAlignedBB
func_72830_b,isAABBInMaterial,2,checks if the given AABB is in the material given. Used while swimming.
func_72831_a,rayTraceBlocks_do_do,2,
func_72832_d,setBlock,2,"Sets the block ID and metadata at a given location. Args: X, Y, Z, new block ID, new metadata, flags. Flag 0x02 will trigger a block update both on server and on client, flag 0x04, if used with 0x02, will prevent a block update on client worlds. Flag 0x01 will pass the original block ID when notifying adjacent blocks, otherwise it will pass 0."
func_72832_d,setBlock,2,"Sets the block ID and metadata at a given location. Args: X, Y, Z, new block ID, new metadata, flags. Flag 1 will cause a block update. Flag 2 will send the change to clients (you almost always want this). Flag 4 prevents the block from being re-rendered, if this is a client world. Flags can be added together."
func_72833_a,getSkyColor,2,Calculates the color for the skybox
func_72834_c,canBlockFreeze,2,"checks to see if a given block is both water, and cold enough to freeze - if the par4 boolean is set, this will only return true if there is a non-water block immediately adjacent to the specified block"
func_72835_b,tick,2,Runs a single tick for the world
@@ -1364,7 +1372,7 @@ func_72836_a,scheduleBlockUpdate,2,Schedules a tick to a block with a delay (Mos
func_72837_a,setBlockTileEntity,2,"Sets the TileEntity for a given block in X, Y, Z coordinates"
func_72838_d,spawnEntityInWorld,2,Called to place all entities as part of a world
func_72839_b,getEntitiesWithinAABBExcludingEntity,2,"Will get all entities within the specified AABB excluding the one passed into it. Args: entityToExclude, aabb"
func_72840_a,getAllCollidingBoundingBoxes,2,calculates and returns a list of colliding bounding boxes within a given AABB
func_72840_a,getCollidingBlockBounds,2,calculates and returns a list of colliding bounding boxes within a given AABB
func_72841_b,getUniqueDataId,2,Returns an unique new data id from the MapStorage for the given prefix and saves the idCounts map to the 'idcounts' file.
func_72842_a,getBlockDensity,2,"Gets the percentage of real blocks within within a bounding box, along a specified vector."
func_72843_D,setRandomSeed,2,puts the World Random seed to a specific state dependant on the inputs
@@ -1379,7 +1387,7 @@ func_72851_f,notifyBlockChange,2,"The block type change and need to notify other
func_72852_a,addTileEntity,2,
func_72853_d,getMoonPhase,2,
func_72854_c,updateAllPlayersSleepingFlag,2,Updates the flag that indicates whether or not all players in the world are sleeping.
func_72855_b,checkIfAABBIsClear,2,"Returns true if there are no solid, live entities in the specified AxisAlignedBB"
func_72855_b,checkNoEntityCollision,2,"Returns true if there are no solid, live entities in the specified AxisAlignedBB"
func_72856_b,getClosestVulnerablePlayerToEntity,2,"Returns the closest vulnerable player to this entity within the given radius, or null if none is found"
func_72857_a,findNearestEntityWithinAABB,2,
func_72858_w,canSnowAt,2,Tests whether or not snow can be placed at a given location
@@ -1436,7 +1444,7 @@ func_72913_w,toggleRain,2,
func_72914_a,addWorldInfoToCrashReport,2,Adds some basic stats of the world to the given crash report.
func_72915_b,setLightValue,2,"Sets the light value either into the sky map or block map depending on if enumSkyBlock is set to sky or block. Args: enumSkyBlock, x, y, z, lightValue"
func_72916_c,chunkExists,2,"Returns whether a chunk exists at chunk coordinates x, y"
func_72917_a,checkIfAABBIsClearExcludingEntity,2,"Returns true if there are no solid, live entities in the specified AxisAlignedBB, excluding the given entity"
func_72917_a,checkNoEntityCollision,2,"Returns true if there are no solid, live entities in the specified AxisAlignedBB, excluding the given entity"
func_72918_a,handleMaterialAcceleration,2,handles the acceleration of an object whilst in water. Not sure if it is used elsewhere.
func_72919_O,getHorizon,2,Returns horizon height for use in rendering the sky.
func_72920_a,getPendingBlockUpdates,2,
@@ -1502,6 +1510,7 @@ func_73025_a,doPreChunk,2,
func_73026_a,getEntityList,2,
func_73027_a,addEntityToWorld,2,Add an ID to Entity mapping to entityHashSet
func_73028_b,removeEntityFromWorld,2,
func_73029_E,doVoidFogParticles,2,
func_73030_b,getEntitySpawnQueue,2,
func_73031_a,invalidateBlockReceiveRegion,2,"Invalidates an AABB region of blocks from the receive queue, in the event that the block has been modified client-side in the intervening 80 receive ticks."
func_73039_n,getEntityTracker,2,Gets the EntityTracker
@@ -1647,6 +1656,7 @@ func_73463_g,getChatVisibility,2,
func_73473_d,getText,2,
func_73475_d,getIsServer,2,Get whether this is a server
func_73489_c,getMetadata,2,
func_73509_c,getWatchedMetadata,2,
func_73568_g,getEffectY,2,
func_73569_h,getEffectZ,2,
func_73570_d,getSoundName,2,
@@ -1657,7 +1667,11 @@ func_73580_b,getChunkPosZ,2,
func_73581_d,getNumberOfChunkInPacket,2,
func_73582_a,getChunkPosX,2,
func_73583_c,getChunkCompressedData,2,
func_73593_d,getCompressedChunkData,2,
func_73594_a,getMapChunkData,2,
func_73607_d,getPlayerVelocityX,2,Gets the X velocity of the player being pushed by the explosion.
func_73608_g,getPlayerVelocityZ,2,Gets the Z velocity of the player being pushed by the explosion.
func_73609_f,getPlayerVelocityY,2,Gets the Y velocity of the player being pushed by the explosion.
func_73660_a,update,2,Updates the JList with a new model.
func_73665_c,getPropertiesFile,2,Returns this PropertyManager's file object used for property saving.
func_73666_a,logMessageAndSave,2,logs an info message then calls saveSettingsToFile Yes this appears to be a potential stack overflow - these 2 functions call each other repeatdly if an exception occurs.
@@ -1788,6 +1802,7 @@ func_73879_b,mouseMovedOrUp,2,"Called when the mouse is moved or a mouse button
func_73892_a,getSentHistory,2,"input is relative and is applied directly to the sentHistoryCursor so -1 is the previous message, 1 is the next message from the current cursor position"
func_73895_u_,completePlayerName,2,Autocompletes player name
func_73906_g,wakeEntity,2,Wakes the entity from the bed
func_73907_g,getLeftBorder,2,Gets the distance from the left border of the window to left border of the controls screen
func_73912_g,makeUseableName,2,"Makes a the name for a world save folder based on your world name, replacing specific characters for _s and appending -s to the end until a free name is available."
func_73914_h,updateButtonText,2,
func_73945_e,copyLinkToClipboard,2,Copies the link to the system clipboard.
@@ -2456,12 +2471,12 @@ func_75756_e,getSaveHandler,2,returns null if no saveHandler is relevent (eg. SM
func_75757_d,loadWorldInfo,2,Loads and returns the world info
func_75758_b,getMapFileFromName,2,Gets the file location of the given map
func_75759_a,flush,2,"Called to flush all changes to disk, waiting for them to complete."
func_75760_g,getSaveDirectoryName,2,Returns the name of the directory where world information is saved.
func_75760_g,getWorldDirectoryName,2,Returns the name of the directory where world information is saved.
func_75761_a,saveWorldInfo,2,Saves the passed in world info.
func_75762_c,checkSessionLock,2,Checks the session lock to prevent save collisions
func_75763_a,getChunkLoader,2,Returns the chunk loader with the provided world provider
func_75764_a,getPlayerData,2,Gets the player data for the given playername as a NBTTagCompound.
func_75765_b,getSaveDirectory,2,gets the File object corresponding to the base directory of this save (saves/404 for a save called 404 etc)
func_75765_b,getWorldDirectory,2,Gets the File object corresponding to the base directory of this world.
func_75766_h,setSessionLock,2,Creates a session lock file for this process
func_75773_a,canContinue,2,Determine if a specific AI Task should continue being executed.
func_75774_a,onUpdateTasks,2,
@@ -2500,6 +2515,7 @@ func_75820_a,writeChunkToNBT,2,"Writes the Chunk passed as an argument to the NB
func_75821_a,writeChunkNBTTags,2,
func_75822_a,checkedReadChunkFromNBT,2,Wraps readChunkFromNBT. Checks the coordinates and several NBT tags.
func_75823_a,readChunkFromNBT,2,Reads the data stored in the passed NBTTagCompound and creates a Chunk with that data in the passed World. Returns the created Chunk.
func_75824_a,addChunkToPending,2,
func_75829_a,distanceTo,2,Returns the linear distance to another path point
func_75830_a,makeHash,2,
func_75831_a,isAssigned,2,Returns true if this point has already been assigned to a path
@@ -2553,6 +2569,7 @@ func_75904_a,getInts,2,"Returns a list of integer values generated by this layer
func_75905_a,initWorldGenSeed,2,Initialize layer's local worldGenSeed based on its own baseSeed and the world's global seed (passed in as an argument).
func_75912_b,choose,2,randomly choose between the four args
func_75913_a,choose,2,randomly choose between the two args
func_75915_a,magnify,2,"Magnify a layer. Parms are seed adjustment, layer, number of times to magnify"
func_75916_b,modeOrRandom,2,returns the mode (most frequently occuring number) or a random number from the 4 integers provided
func_75917_a,choose,2,Chooses one of the two inputs randomly.
func_75918_d,initCraftableStats,2,Initializes statistics related to craftable items. Is only called after both block and item stats have been initialized.
@@ -2643,7 +2660,7 @@ func_76126_a,sin,2,sin looked up in a table
func_76127_a,average,2,
func_76128_c,floor_double,2,Returns the greatest integer less than or equal to the double argument
func_76129_c,sqrt_float,2,
func_76130_a,abs_int,2,
func_76130_a,abs_int,2,Returns the unsigned value of an int.
func_76131_a,clamp_float,2,"Returns the value of the first parameter, clamped to be within the lower and upper limits given by the second and third parameters"
func_76132_a,abs_max,2,Maximum of the absolute value of two numbers.
func_76133_a,sqrt_double,2,
@@ -3348,6 +3365,7 @@ func_77832_l,getEffects,2,Returns a list of potion effects for the specified ite
func_77833_h,isEffectInstant,2,
func_77834_f,getEffects,2,Returns a list of effects for the specified potion damage value.
func_77840_a,spawnCreature,2,"Spawns the creature specified by the egg's type in the location specified by the last three parameters. Parameters: world, entityID, x, y, z."
func_77842_f,getMaterialName,2,"Returns the name of the material this tool is made from as it is declared in EnumToolMaterial (meaning diamond would return ""EMERALD"")"
func_77844_a,setPotionEffect,2,"sets a potion effect on the item. Args: int potionId, int duration (will be multiplied by 20), int amplifier, float probability of effect happening"
func_77845_h,isWolfsFavoriteMeat,2,Whether wolves like this food (true for raw and cooked porkchop).
func_77846_g,getSaturationModifier,2,gets the saturationModifier of the ItemFood
@@ -3584,7 +3602,7 @@ func_78569_d,renderBlockCactusImpl,2,Render block cactus implementation
func_78570_q,renderStandardBlock,2,Renders a standard cube block at the given coordinates
func_78571_c,renderPistonRodEW,2,Render piston rod east/west
func_78572_c,renderBlockTorch,2,Renders a torch block at the given coordinates
func_78573_e,renderNorthFace,2,"Renders the given texture to the north (x-negative) face of the block. Args: block, x, y, z, texture"
func_78573_e,renderFaceXNeg,2,"Renders the given texture to the west (x-negative) face of the block. Args: block, x, y, z, texture"
func_78574_w,renderBlockBed,2,render a bed at the given coordinates
func_78575_a,renderBlockStemSmall,2,Render block stem small
func_78576_j,renderBlockLadder,2,Renders a ladder block at the given coordinates
@@ -3616,24 +3634,24 @@ func_78601_u,renderBlockDoor,2,Renders a door block at the given coordinates
func_78602_a,getAoBrightness,2,Get ambient occlusion brightness
func_78603_m,renderBlockStem,2,Render block stem
func_78604_a,renderBlockUsingTexture,2,Renders a block using the given texture instead of the block's own default texture
func_78605_f,renderSouthFace,2,"Renders the given texture to the south (x-positive) face of the block. Args: block, x, y, z, texture"
func_78605_f,renderFaceXPos,2,"Renders the given texture to the east (x-positive) face of the block. Args: block, x, y, z, texture"
func_78606_a,renderBlockStemBig,2,Render block stem big
func_78607_b,renderPistonRodSN,2,Render piston rod south/north
func_78608_c,renderPistonExtension,2,renders the pushing part of a piston
func_78609_c,renderStandardBlockWithColorMultiplier,2,"Renders a standard cube block at the given coordinates, with a given color ratio. Args: block, x, y, z, r, g, b"
func_78610_x,renderBlockRepeater,2,render a redstone repeater at the given coordinates
func_78611_c,renderEastFace,2,"Renders the given texture to the east (z-negative) face of the block. Args: block, x, y, z, texture"
func_78611_c,renderFaceZNeg,2,"Renders the given texture to the north (z-negative) face of the block. Args: block, x, y, z, texture"
func_78612_b,renderBlockByRenderType,2,Renders the block at the given coordinates using the block's rendering type
func_78613_a,renderBottomFace,2,"Renders the given texture to the bottom face of the block. Args: block, x, y, z, texture"
func_78613_a,renderFaceYNeg,2,"Renders the given texture to the bottom face of the block. Args: block, x, y, z, texture"
func_78614_n,renderBlockCrops,2,Render block crops
func_78615_a,renderBlockCauldron,2,Render block cauldron
func_78616_a,renderBlockCocoa,2,Renders a Cocoa block at the given coordinates
func_78617_b,renderTopFace,2,"Renders the given texture to the top face of the block. Args: block, x, y, z, texture"
func_78617_b,renderFaceYPos,2,"Renders the given texture to the top face of the block. Args: block, x, y, z, texture"
func_78618_a,renderBlockDragonEgg,2,
func_78619_g,renderBlockTripWire,2,Renders a trip wire block at the given coordinates
func_78620_l,renderCrossedSquares,2,"Renders any block requiring croseed squares such as reeds, flowers, and mushrooms"
func_78621_p,renderBlockFluids,2,Renders a block based on the BlockFluids class at the given coordinates
func_78622_d,renderWestFace,2,"Renders the given texture to the west (z-positive) face of the block. Args: block, x, y, z, texture"
func_78622_d,renderFaceZPos,2,"Renders the given texture to the south (z-positive) face of the block. Args: block, x, y, z, texture"
func_78623_a,renderTorchAtAngle,2,"Renders a torch at the given coordinates, with the base slanting at the given delta"
func_78713_a,getEntityRenderObject,2,
func_78714_a,getDistanceToCamera,2,
@@ -3765,11 +3783,12 @@ func_82130_k,getLevels,2,Return the levels of this beacon's pyramid.
func_82131_u,updateState,2,Checks if the Beacon has a valid pyramid underneath and direct sunlight above
func_82132_j,getSecondaryEffect,2,Return the secondary potion effect given by this beacon.
func_82141_a,copyDataFrom,2,"Copies important data from another entity to this entity. Used when teleporting entities between worlds, as this actually deletes the teleporting entity and re-creates it on the other side. Params: Entity to copy from, unused (always true)"
func_82142_c,setHasActivePotion,2,
func_82142_c,setInvisible,2,
func_82144_au,doesEntityNotTriggerPressurePlate,2,Return whether this entity should NOT trigger a pressure plate or a tripwire.
func_82145_z,getMaxInPortalTime,2,Return the amount of time this entity should stay in a portal before being transported.
func_82147_ab,getPortalCooldown,2,Return the amount of cooldown before this entity can use a portal again.
func_82150_aj,getHasActivePotion,2,
func_82148_at,getTeleportDirection,2,
func_82150_aj,isInvisible,2,
func_82154_e,setIsAnvil,2,
func_82159_b,getArmorPosition,2,
func_82160_b,dropEquipment,2,Drop the equipment for this entity.
@@ -3812,6 +3831,8 @@ func_82244_d,displayGUIAnvil,2,Displays the GUI for interacting with an anvil.
func_82245_bX,isSpawnForced,2,
func_82246_f,canCurrentToolHarvestBlock,2,"Returns true if the item the player is holding can harvest the block at the given coords. Args: x, y, z."
func_82247_a,canPlayerEdit,2,
func_82265_c,setEnabled,2,
func_82266_h,setDisabledTextColour,2,
func_82273_a,setFlatGeneratorInfo,2,
func_82274_h,getRenderItem,2,
func_82275_e,getFlatGeneratorInfo,2,
@@ -3840,6 +3861,7 @@ func_82356_Z,isCommandBlockEnabled,2,Return whether command blocks are enabled.
func_82357_ak,getSpawnProtectionSize,2,Return the spawn protection area's size.
func_82358_a,isUsernameIndex,2,Return whether the specified command parameter index is a username parameter.
func_82362_a,getRequiredPermissionLevel,2,Return the required permission level for this command.
func_82363_b,parseDouble,2,Parses a double from the given string or throws an exception if it's not a double.
func_82364_d,getDifficultyForName,2,Return the difficulty value for the specified string.
func_82366_d,getGameRules,2,Return the game rule set this command should be able to manipulate.
func_82369_d,getAllOnlineUsernames,2,Return all usernames currently connected to the server.
@@ -3873,7 +3895,7 @@ func_82463_b,setEntitySoundPitch,2,"Sets the pitch of the sound associated with
func_82464_d,stopAllSounds,2,Stops all currently playing sounds
func_82465_b,isEntitySoundPlaying,2,"Returns true if a sound is currently associated with the given entity, or false otherwise."
func_82466_e,pauseAllSounds,2,Pauses all currently playing sounds
func_82467_a,playEntitySound,2,"If a sound is already playing from the given entity, update the position and velocity of that sound to match the entity. Otherwise, start playing a sound from that entity. Args: The sound name, the entity, the volume, the pitch, unknown flag"
func_82467_a,playEntitySound,2,"If a sound is already playing from the given entity, update the position and velocity of that sound to match the entity. Otherwise, start playing a sound from that entity. Setting the last flag to true will prevent other sounds from overriding this one. Args: The sound name, the entity, the volume, the pitch, priority"
func_82468_a,setEntitySoundVolume,2,"Sets the volume of the sound associated with the given entity, if one is playing. The volume is scaled by the global sound volume. Args: the entity, the volume (from 0 to 1)"
func_82469_c,stopEntitySound,2,Stops playing the sound associated with the given entity
func_82482_a,dispense,2,Dispenses the specified ItemStack from a dispenser.
@@ -3882,6 +3904,7 @@ func_82486_a,doDispense,2,
func_82487_b,dispenseStack,2,"Dispense the specified stack, play the dispense sound and spawn particles."
func_82489_a,spawnDispenseParticles,2,Order clients to display dispense particles from the specified block and facing.
func_82499_a,getProjectileEntity,2,Return the projectile entity spawned by this dispense behavior.
func_82505_u_,isFlowerPot,2,Returns true only if block is flowerPot
func_82519_a_,onFinishFalling,2,Called when the falling block entity for this block hits the ground and turns back into a block
func_82520_a,onStartFalling,2,Called when the falling block entity for this block is created
func_82524_c,isRedstoneRepeaterBlockID,2,
@@ -3895,6 +3918,8 @@ func_82533_j,getCropItem,2,Generate a crop produce ItemStack for this crop.
func_82538_d,canConnectWallTo,2,Return whether an adjacent block can connect to a wall.
func_82543_e,isBlockStairsID,2,Checks if supplied ID is one of a BlockStairs
func_82547_a,comparePlayers,2,Compare the position of two players.
func_82558_j,getWalkSpeed,2,
func_82560_d,getRelativeVolumeDisabled,2,
func_82563_j,getShowCape,2,
func_82571_y,getGeneratorOptions,2,
func_82572_b,incrementTotalWorldTime,2,
@@ -4029,6 +4054,7 @@ func_82877_b,setPlayerWalkSpeed,2,
func_82879_c,sendSettingsToServer,2,Send a client info packet with settings information to the server
func_82883_a,getUnicodeFlag,2,Get unicodeFlag controlling whether strings should be rendered with Unicode fonts instead of the default.png font.
func_82889_a,getBatSize,2,"not actually sure this is size, is not used as of now, but the model would be recreated if the value changed and it seems a good match for a bats size"
func_83003_a,getMemoryReport,2,Returns a string with allocated and used memory.
func_83005_z,getBlockBoundsMinZ,2,returns the block bounderies minZ value
func_83006_A,getBlockBoundsMaxZ,2,returns the block bounderies maxZ value
func_83007_w,getBlockBoundsMaxX,2,returns the block bounderies maxX value
@@ -4058,6 +4084,7 @@ func_85057_a,makeCategoryDepth,2,Creates a CrashReportCategory for the given sta
func_85058_a,makeCategory,2,Creates a CrashReportCategory
func_85062_a,callBlockDataValue,2,
func_85064_a,callBlockLocationInfo,2,
func_85071_a,getLocationInfo,2,"Returns a string with world information on location.Args:x,y,z"
func_85079_a,callBlockType,2,
func_85085_a,callSuspiciousClasses,2,
func_85093_e,renderArrowsStuckInEntity,2,"renders arrows the Entity has been attacked with, attached to it"
@@ -4096,6 +4123,8 @@ func_85145_a,callTileEntityName,2,
func_85151_d,getLowerChestInventory,2,Return this chest container's lower chest inventory.
func_85154_a,callEntityType,2,
func_85156_a,removeTask,2,removes the indicated task from the entity's AI tasks.
func_85157_q,isAlwaysHarvested,2,Check to see if we can harvest it in any case.
func_85158_p,setAlwaysHarvested,2,Set as harvestable in any case.
func_85160_a,callStructureType,2,
func_85162_a,callChunkPositionHash,2,
func_85170_a,callServerType,2,
@@ -4103,8 +4132,10 @@ func_85173_a,playSoundToNearExcept,2,Plays sound to all near players except the
func_85175_e,blockGetRenderType,2,Returns the render type of the block at the given coordinate.
func_85176_s,getDefaultTeleporter,2,
func_85181_a,getRandomModelBox,2,
func_85182_a,sameToolAndBlock,2,
func_85187_a,drawString,2,"Draws the specified string. Args: string, x, y, color, dropShadow"
func_85188_a,makePortal,2,
func_85189_a,removeStalePortalLocations,2,called periodically to remove out-of-date portal locations from the cache list. Argument par1 is a WorldServer.getTotalWorldTime() value.
func_90010_a,isPartOfLargeChest,2,Return whether the given inventory is part of this large chest.
func_90011_a,createChild,2,
func_90019_g,applyRenderColor,2,Creates a new EntityDiggingFX with the block render color applied to the base particle color
@@ -4128,16 +4159,47 @@ func_92058_a,setEntityItemStack,2,Sets the ItemStack for this entity
func_92059_d,getEntityItem,2,"Returns the ItemStack corresponding to the Entity (Note: if no item exists, will log an error but still return an ItemStack containing Block.stone)"
func_92062_k,sendChatMsg,2,Sends the given string to every player as chat message.
func_92085_d,getIsBlank,2,
func_92087_a,causeThornsDamage,2,Returns the EntityDamageSource of the Thorns enchantment
func_92089_a,canApply,2,
func_92097_a,negateDamage,2,"Used by ItemStack.attemptDamageItem. Randomly determines if a point of damage should be negated using the enchantment level (par1). If the ItemStack is Armor then there is a flat 60% chance for damage to be negated no matter the enchantment level, otherwise there is a 1-(par/1) chance for damage to be negated."
func_92103_a,addRecipe,2,
func_94041_b,isStackValidForSlot,2,Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot.
func_94042_c,isInvNameLocalized,2,"If this returns false, the inventory name will be used as an unlocalized name, and translated into the player's language. Otherwise it will be used directly."
func_94049_a,setCustomName,2,
func_94052_a,setParticleIcon,2,
func_94053_h,nextTextureIndexX,2,
func_94064_a,displayGUIHopper,2,
func_94065_a,drawTexturedModelRectFromIcon,2,
func_94127_c,getStartInventorySide,2,Get the start of the side inventory.
func_94128_d,getSizeInventorySide,2,Get the size of the side inventory.
func_94083_c,getTntPlacedBy,2,returns null or the entityliving it was placed or ignited by
func_94085_r,getDefaultDisplayTileOffset,2,
func_94086_l,setDisplayTileOffset,2,
func_94087_l,getMinecartType,2,
func_94089_m,getDisplayTile,2,
func_94090_a,createMinecart,2,"Creates a new minecart of the specified type in the specified location in the given world. par0World - world to create the minecart in, double par1,par3,par5 represent x,y,z respectively. int par7 specifies the type: 1 for MinecartChest, 2 for MinecartFurnace, 3 for MinecartTNT, 4 for MinecartMobSpawner, 5 for MinecartHopper and 0 for a standard empty minecart"
func_94091_a,updateOnTrack,2,
func_94092_k,setDisplayTileData,2,
func_94093_n,getDefaultDisplayTile,2,
func_94094_j,setDisplayTile,2,
func_94095_a,killMinecart,2,
func_94096_e,setHasDisplayTile,2,
func_94097_p,getDefaultDisplayTileData,2,
func_94098_o,getDisplayTileData,2,
func_94099_q,getDisplayTileOffset,2,
func_94100_s,hasDisplayTile,2,
func_94101_h,applyDrag,2,
func_94103_c,explodeCart,2,Makes the minecart explode.
func_94105_c,ignite,2,Ignites this TNT cart.
func_94107_f,setMinecartPowered,2,
func_94108_c,isMinecartPowered,2,
func_94114_a,areItemStacksEqualItem,2,
func_94116_j,insertItemToInventory,2,Inserts one item from the hopper into the inventory the hopper is pointing at.
func_94117_a,insertStack,2,"Inserts a stack into an inventory. Args: Inventory, stack, side. Returns leftover items."
func_94119_v,getOutputInventory,2,Gets the inventory the hopper is pointing at.
func_94128_d,getAccessibleSlotsFromSide,2,Returns an array containing the indices of the slots that can be accessed by automation on the given side of this block.
func_94140_a,registerDestroyBlockIcons,2,
func_94143_a,updateIcons,2,
func_94148_a,renderItemStack,2,
func_94144_a,renderBlockInMinecart,2,Renders the block that is inside the minecart.
func_94148_a,renderItemOverlayIntoGUI,2,
func_94149_a,renderIcon,2,
func_94152_c,refreshTextureMaps,2,
func_94156_a,intersection,2,
@@ -4208,7 +4270,7 @@ func_94280_f,getTextureName,2,
func_94281_a,copyFrom,2,
func_94282_c,getGlTextureId,2,
func_94284_b,getTextureId,2,
func_94285_g,createTexture,2,
func_94285_g,uploadTexture,2,
func_94305_f,doStitch,2,
func_94306_e,getTexture,2,
func_94308_a,getCeilPowerOf2,2,Returns power of 2 >= the specified value
@@ -4216,13 +4278,37 @@ func_94309_g,getStichSlots,2,
func_94310_b,allocateSlot,2,Attempts to find space for specified tile
func_94311_c,expandAndAllocateSlot,2,Expand stitched texture in order to make space for specified tile
func_94312_a,addStitchHolder,2,
func_94327_t_,getItemIconName,2,Gets the icon name of the ItemBlock corresponding to this block. Used by hoppers.
func_94328_b_,getComparatorInputOverride,2,"If hasComparatorInputOverride returns true, the return value from this is used instead of the redstone signal strength when this block inputs to a comparator."
func_94329_b,isAssociatedBlockID,2,Static version of isAssociatedBlockID.
func_94330_A,getUnlocalizedName2,2,Returns the unlocalized name without the tile. prefix. Caution: client-only.
func_94331_a,canPlaceBlockOnSide,2,
func_94332_a,registerIcons,2,"When this method is called, your block should register all the icons it needs with the given IconRegister. This is the only chance you get to register icons."
func_94334_h,isAssociatedBlockID,2,"Returns true if the given block ID is equivalent to this one. Example: redstoneTorchOn matches itself and redstoneTorchOff, and vice versa. Most blocks only match themselves."
func_94350_c,getPowerSupply,2,Argument is metadata. Returns power level (0-15)
func_94351_d,getPlateState,2,Returns the current state of the pressure plate. Returns a value between 0 and 15 based on the number of items on it.
func_94352_a,getSensitiveAABB,2,
func_94355_d,getMetaFromWeight,2,Argument is weight (0-15). Return the metadata to be set because of it.
func_94434_o,getIconSideOverlay,2,
func_94442_h_,getInventory,2,"Gets the inventory of the chest at the specified coords, accounting for blocks or ocelots on top of the chest, and double chests."
func_94444_j_,updateLightLevel,2,
func_94446_i,getBeaconIcon,2,
func_94448_e,getBrewingStandIcon,2,
func_94451_c,getDirectionFromMetadata,2,
func_94452_d,getIsBlockNotPoweredFromMetadata,2,
func_94453_b,getHopperIcon,2,
func_94501_a,getRailLogic,2,
func_94502_a,isMinecartTrack,2,
func_94503_c,canConnectFrom,2,
func_94504_a,setBasicRail,2,
func_94505_a,getNumberOfAdjacentTracks,2,
func_94506_c,connectToNeighbor,2,
func_94507_b,canConnectTo,2,
func_94508_a,isRailChunkPositionCorrect,2,Checks if the rail is at the chunk position it is expected to be.
func_94509_b,refreshConnectedTracks,2,
func_94510_b,isPartOfTrack,2,
func_94520_b,containsTranslateKey,2,
func_94526_b,calcRedstoneFromInventory,2,
func_94539_a,setExplosionSource,2,
func_94540_d,setExplosion,2,
func_94541_c,isExplosion,2,
@@ -4231,13 +4317,53 @@ func_94572_D,getStrongestIndirectPower,2,
func_94573_a,isBlockTickScheduled,2,"Returns true if the given block will receive a scheduled tick in the future. Args: X, Y, Z, blockID"
func_94574_k,getIndirectPowerOutput,2,"Returns the indirect signal strength being outputted by the given block in the *opposite* of the given direction. Args: X, Y, Z, direction"
func_94575_c,setBlock,2,"Sets a block and notifies relevant systems with the block change Args: x, y, z, blockID"
func_94576_a,getEntitiesWithinAABBExcludingEntity,2,
func_94577_B,getBlockPowerInput,2,"Returns the highest redstone signal strength powering the given block. Args: X, Y, Z."
func_94578_a,destroyBlock,2,"Destroys a block and optionally drops items. Args: X, Y, Z, dropItems"
func_94581_a,updateIcons,2,
func_94581_a,registerIcons,2,
func_94599_c,getItemIconForUseDuration,2,"used to cycle through icons based on their used duration, i.e. for the bow"
func_94608_d,getItemSpriteNumber,2,
func_94609_a,callTileEntityID,2,
func_94611_a,callTileEntityDataInfo,2,
func_94901_k,getSpriteNumber,2,"Returns 0 for /terrain.png, 1 for /gui/items.png"
func_96090_ax,getTranslatedEntityName,2,Returns the translated name of the entity.
func_96095_a,onActivatorRailPass,2,Called every tick the minecart is on an activator rail.
func_96096_ay,isIgnited,2,Returns true if the TNT minecart is ignited.
func_96104_c,setCommandSenderName,2,Sets the name of the command sender
func_96107_aA,getXPos,2,Gets the world X position for this hopper entity.
func_96108_aC,getZPos,2,Gets the world Z position for this hopper entity.
func_96109_aB,getYPos,2,Gets the world Y position for this hopper entity.
func_96110_f,setBlocked,2,Set whether this hopper minecart is being blocked by an activator rail.
func_96111_ay,getBlocked,2,Get whether this hopper minecart is being blocked by an activator rail.
func_96115_a,setInventoryName,2,
func_96116_a,suckItemsIntoHopper,2,Sucks one item into the given hopper from an inventory or EntityItem above it.
func_96117_b,getInventoryAtLocation,2,Gets an inventory at the given location to extract items into or take items from. Can find either a tile entity or regular entity implementing IInventory.
func_96118_b,getInventoryAboveHopper,2,"Looks for anything, that can hold items (like chests, furnaces, etc.) one block above the given hopper."
func_96123_co,getWorldScoreboard,2,
func_96124_cp,getTeam,2,
func_96125_a,displayGUIHopperMinecart,2,
func_96334_d,getScoreboardFromWorldServer,2,
func_96335_a,getScoreObjectivesList,2,"If the parameter is true, does not return read-only entries."
func_96336_d,getObjectivesList,2,Handler for the 'scoreboard objectives list' command.
func_96337_e,removeObjective,2,Handler for the 'scoreboard objectives remove' command.
func_96338_a,getTeam,2,Returns the ScorePlayerTeam for the given team name.
func_96339_l,setPlayerScore,2,Handler for the 'scoreboard players [add|remove|set]' commands.
func_96340_c,addTeam,2,Handler for the 'scoreboard teams add' command.
func_96341_k,listPlayers,2,Handler for the 'scoreboard players list' command.
func_96342_g,joinTeam,2,Handler for the 'scoreboard teams join' command.
func_96343_e,removeTeam,2,Handler for the 'scoreboard teams remove' command.
func_96344_f,getTeamList,2,Handler for the 'scoreboard teams list' command.
func_96345_a,getScoreObjective,2,"User-safe version of Scoreboard.getObjective, does checks against the objective not being found and whether it's read-only or not. If true, the second parameter makes the function throw an exception if the objective is read-only."
func_96346_i,emptyTeam,2,Handler for the 'scoreboard teams empty' command.
func_96347_j,setObjectivesDisplay,2,Handler for the 'scoreboard objectives setdisplay' command.
func_96348_d,setTeamOption,2,Handler for the 'scoreboard teams option' command.
func_96349_h,leaveTeam,2,Handler for the 'scoreboard teams leave' command.
func_96350_b,addObjective,2,Handler for the 'scoreboard objectives add' command.
func_96351_m,resetPlayerScore,2,Handler for the 'scoreboard players reset' command.
func_96435_a,handleSetPlayerTeam,2,Handle a set player team packet.
func_96436_a,handleSetObjective,2,Handle a set objective packet.
func_96437_a,handleSetScore,2,Handle a set score packet.
func_96438_a,handleSetDisplayObjective,2,Handle a set display objective packet.
func_96439_d,notifyBlocksOfNeighborChange,2,"Calls notifyBlockOfNeighborChange on adjacent blocks, except the one on the given side. Args: X, Y, Z, changingBlockID, side"
func_96441_U,getScoreboard,2,
func_96444_a,mixAoBrightness,2,
@@ -4247,33 +4373,84 @@ func_96447_a,renderBlockHopperMetadata,2,
func_96448_c,getMissingIcon,2,
func_96455_e,getMissingIcon,2,
func_96468_q_,hasComparatorInputOverride,2,"If this returns true, then comparators facing away from this block will use the value from getComparatorInputOverride instead of the actual redstone signal strength."
func_96471_k,updateMetadata,2,Updates the Metadata to include if the Hopper gets powered by Redstone or not
func_96472_a,getBehaviorForItemStack,2,Returns the behavior for the given ItemStack.
func_96475_a_,getTileEntityComparator,2,Returns the blockTileEntity at given coordinates.
func_96477_c,markOrGrowMarked,2,
func_96478_d,setBlockBoundsForSnowDepth,2,"calls setBlockBounds based on the depth of the snow. Int is any values 0x0-0x7, usually this blocks metadata."
func_96509_i,getPlayersTeam,2,Gets the ScorePlayerTeam object for the given username.
func_96512_b,removePlayerFromTeam,2,Removes the given username from the given ScorePlayerTeam. If the player is not on the team then an IllegalStateException is thrown.
func_96514_c,getScoreObjectives,2,
func_96517_b,getObjectiveDisplaySlot,2,"Returns 'list' for 0, 'sidebar' for 1, 'belowName for 2, otherwise null."
func_96518_b,getObjective,2,Returns a ScoreObjective for the objective name
func_96526_d,getObjectiveNames,2,
func_96537_j,getObjectiveDisplaySlotNumber,2,"Returns 0 for (case-insensitive) 'list', 1 for 'sidebar', 2 for 'belowName', otherwise -1."
func_96556_a,callServerMemoryStats,2,
func_96557_a,callServerProfiler,2,
func_96559_d,getFrontOffsetY,2,
func_96563_a,callEntityName,2,
func_96631_a,attemptDamageItem,2,"Attempts to damage the ItemStack with par1 amount of damage, If the ItemStack has the Unbreaking enchantment there is a chance for each point of damage to be negated. Returns true if it takes more damage than getMaxDamage(). Returns false otherwise or if the ItemStack can't be damaged or if all points of damage are negated."
func_96632_a,callItemDisplayName,2,
func_96637_b,isReadOnly,2,
func_96670_d,getMembershipCollection,2,
func_96678_d,getDisplayName,2,
func_96679_b,getName,2,
func_96680_c,getCriteria,2,
func_96681_a,setDisplayName,2,
func_96682_a,getScoreboard,2,
func_98033_al,getLogAgent,2,
func_98035_c,addNotRiddenEntityID,2,
func_98042_n,setTransferTicker,2,"Sets the transfer ticker, used to determine the delay between transfers."
func_98043_aE,canTransfer,2,Returns whether the hopper cart can currently transfer an item.
func_98046_c,setTransferCooldown,2,
func_98047_l,isCoolingDown,2,
func_98052_bS,canPickUpLoot,2,
func_98053_h,setCanPickUpLoot,2,
func_98076_a,getServerLogger,2,
func_98145_a,createEmptyTexture,2,
func_98146_d,getBasename,2,"Strips directory and file extension from the specified path, returning only the filename"
func_98147_a,hasAnimationTxt,2,Returns true if specified texture pack contains animation data for the specified texture file
func_98152_d,getAllUsernames,2,
func_98179_a,computeLightValue,2,
func_98180_V,getWorldLogAgent,2,
func_98182_a,handleWorldParticles,2,Handle a world particles packet.
func_98184_a,setupTextureExt,2,
func_98185_a,resetBoundTexture,2,
func_98186_a,colorToAnaglyph,2,
func_98187_b,bindTexture,2,
func_98194_g,getPositionY,2,Gets the Y position of the particle.
func_98195_d,getParticleName,2,
func_98196_i,getOffsetX,2,This is added to the X position after being multiplied by random.nextGaussian()
func_98197_l,getSpeed,2,Gets the speed of the particles.
func_98198_h,getPositionZ,2,Gets the Z position of the particle.
func_98199_k,getOffsetZ,2,This is added to the Z position after being multiplied by random.nextGaussian()
func_98200_f,getPositionX,2,Gets the X position of the particle.
func_98201_j,getOffsetY,2,This is added to the Y position after being multiplied by random.nextGaussian()
func_98202_m,getQuantity,2,Gets the number of particles to create.
func_98213_d,getHopperTile,2,
func_98225_a,getPacketClass,2,
func_98230_d,logFine,2,
func_98231_b,logWarningFormatted,2,
func_98232_c,logSevere,2,
func_98233_a,logInfo,2,
func_98234_c,logSevereException,2,
func_98235_b,logWarningException,2,
func_98236_b,logWarning,2,
func_98238_b,setupLogger,2,Sets up the logger for usage.
func_98243_a,callPacketID,2,
func_98266_d,getSpawnerZ,2,
func_98268_b,setDelayToMin,2,"Sets the delay to minDelay if parameter given is 1, else return false."
func_98269_i,getRandomMinecart,2,
func_98270_a,readFromNBT,2,
func_98271_a,getSpawnerWorld,2,
func_98272_a,setMobID,2,
func_98274_c,getSpawnerY,2,
func_98275_b,getSpawnerX,2,
func_98276_e,getEntityNameToSpawn,2,Gets the entity name that should be spawned.
func_98277_a,setRandomMinecart,2,
func_98278_g,updateSpawner,2,
func_98279_f,canRun,2,Returns true if there's a player close enough to this mob spawner to activate it.
func_98280_b,writeToNBT,2,
func_98304_a,readFontData,2,
func_98305_c,readFontTexture,2,
func_98306_d,readGlyphSizes,2,
1 searge name side desc
2 func_100008_d isDurationMax 2 Returns true if duration is at maximum, false otherwise.
3 func_100009_j_ getFacing 2
4 func_100011_g getIsPotionDurationMax 2
5 func_100012_b setPotionDurationMax 2 Toggle the isPotionDurationMax field.
6 func_100015_a isKeyDown 2 Returns whether the specified key binding is currently being pressed.
7 func_102007_a canInsertItem 2 Returns true if automation can insert the given item in the given slot from the given side. Args: Slot, item, side
8 func_102008_b canExtractItem 2 Returns true if automation can extract the given item in the given slot from the given side. Args: Slot, item, side
9 func_102013_b canExtractItemFromInventory 2
10 func_102026_a isBlockTopFacingSurfaceSolid 2 Performs check to see if the block is a normal, solid block, or if the metadata of the block indicates that its facing puts its solid side upwards. (inverted stairs, for example)
11 func_102028_d isSplashPotionEffect 2
12 func_70000_a addServerStatsToSnooper 2
13 func_70001_b addServerTypeToSnooper 2
14 func_70002_Q isSnooperEnabled 2 Returns whether snooping is enabled or not.
456 func_70951_a getRandomSizedStack 2
457 func_70965_a attackEntityFromPart 2
458 func_70967_k setNewTarget 2 Sets a new target for the flight AI. It can be a random coordinate or a nearby player.
459 func_70968_i getDragonHealth getBossHealth 2 Returns the health points of the dragon.
460 func_70969_j updateDragonEnderCrystal 2 Updates the state of the enderdragon's current endercrystal.
461 func_70970_a collideWithEntities 2 Pushes all entities inside the list away from the enderdragon.
462 func_70971_b attackEntitiesInList 2 Attacks all entities inside this list, dealing 5 hearts of damage.
638 func_71268_U getCanSpawnAnimals 2
639 func_71269_o setTexturePack 2
640 func_71270_I getFolderName 2
641 func_71272_O deleteWorldAndStopServer 2 WARNING : directly calls getActiveAnvilConverter().deleteWorldDirectory(theWorldServer[0].getSaveHandler().getSaveDirectoryName()); WARNING : directly calls getActiveAnvilConverter().deleteWorldDirectory(theWorldServer[0].getSaveHandler().getWorldDirectoryName());
642 func_71273_Y getMOTD 2
643 func_71274_v getServerMOTD 2 Returns the server message of the day
644 func_71275_y getMaxPlayers 2 Returns the maximum number of players allowed on the server.
801 func_71765_d getMyPort 2
802 func_71766_a processPendingConnections 2
803 func_71767_c getInetAddress 2
func_71770_b isLocalHost 2
804 func_71779_a getIV 2
805 func_71780_b getParameters 2
806 func_71783_a getKey 2
840 func_71855_c isProvidingStrongPower 2 Returns true if the block is emitting direct/strong redstone power on the specified side. Args: World, X, Y, Z, side. Note that the side is reversed - eg it is 1 (up) when checking the bottom of the block.
841 func_71856_s_ getRenderBlockPass 2 Returns which pass should this block be rendered on. 0 for solids and 1 for alpha
842 func_71857_b getRenderType 2 The type of render function that is called for this block
843 func_71858_a getBlockTextureFromSideAndMetadata getIcon 2 From the specified side and block metadata retrieves the blocks texture. Args: side, metadata
844 func_71859_p_ tickRate 2 How many world ticks before ticking
845 func_71860_a onBlockPlacedBy 2 Called when the block is placed in the world.
846 func_71861_g onBlockAdded 2 Called whenever the block is added into the world. Args: world, x, y, z
1361 func_72826_c getCelestialAngle 2 calls calculateCelestialAngle
1362 func_72827_u getProviderName 2 Returns the name of the current chunk provider, by calling chunkprovider.makeString()
1363 func_72828_b unloadEntities 2 Adds a list of entities to be unloaded on the next pass of World.updateEntities()
1364 func_72829_c isAABBNonEmpty checkBlockCollision 2 Returns true if there are any blocks in the region constrained by an AxisAlignedBB
1365 func_72830_b isAABBInMaterial 2 checks if the given AABB is in the material given. Used while swimming.
1366 func_72831_a rayTraceBlocks_do_do 2
1367 func_72832_d setBlock 2 Sets the block ID and metadata at a given location. Args: X, Y, Z, new block ID, new metadata, flags. Flag 0x02 will trigger a block update both on server and on client, flag 0x04, if used with 0x02, will prevent a block update on client worlds. Flag 0x01 will pass the original block ID when notifying adjacent blocks, otherwise it will pass 0. Sets the block ID and metadata at a given location. Args: X, Y, Z, new block ID, new metadata, flags. Flag 1 will cause a block update. Flag 2 will send the change to clients (you almost always want this). Flag 4 prevents the block from being re-rendered, if this is a client world. Flags can be added together.
1368 func_72833_a getSkyColor 2 Calculates the color for the skybox
1369 func_72834_c canBlockFreeze 2 checks to see if a given block is both water, and cold enough to freeze - if the par4 boolean is set, this will only return true if there is a non-water block immediately adjacent to the specified block
1370 func_72835_b tick 2 Runs a single tick for the world
1372 func_72837_a setBlockTileEntity 2 Sets the TileEntity for a given block in X, Y, Z coordinates
1373 func_72838_d spawnEntityInWorld 2 Called to place all entities as part of a world
1374 func_72839_b getEntitiesWithinAABBExcludingEntity 2 Will get all entities within the specified AABB excluding the one passed into it. Args: entityToExclude, aabb
1375 func_72840_a getAllCollidingBoundingBoxes getCollidingBlockBounds 2 calculates and returns a list of colliding bounding boxes within a given AABB
1376 func_72841_b getUniqueDataId 2 Returns an unique new data id from the MapStorage for the given prefix and saves the idCounts map to the 'idcounts' file.
1377 func_72842_a getBlockDensity 2 Gets the percentage of real blocks within within a bounding box, along a specified vector.
1378 func_72843_D setRandomSeed 2 puts the World Random seed to a specific state dependant on the inputs
1387 func_72852_a addTileEntity 2
1388 func_72853_d getMoonPhase 2
1389 func_72854_c updateAllPlayersSleepingFlag 2 Updates the flag that indicates whether or not all players in the world are sleeping.
1390 func_72855_b checkIfAABBIsClear checkNoEntityCollision 2 Returns true if there are no solid, live entities in the specified AxisAlignedBB
1391 func_72856_b getClosestVulnerablePlayerToEntity 2 Returns the closest vulnerable player to this entity within the given radius, or null if none is found
1392 func_72857_a findNearestEntityWithinAABB 2
1393 func_72858_w canSnowAt 2 Tests whether or not snow can be placed at a given location
1444 func_72914_a addWorldInfoToCrashReport 2 Adds some basic stats of the world to the given crash report.
1445 func_72915_b setLightValue 2 Sets the light value either into the sky map or block map depending on if enumSkyBlock is set to sky or block. Args: enumSkyBlock, x, y, z, lightValue
1446 func_72916_c chunkExists 2 Returns whether a chunk exists at chunk coordinates x, y
1447 func_72917_a checkIfAABBIsClearExcludingEntity checkNoEntityCollision 2 Returns true if there are no solid, live entities in the specified AxisAlignedBB, excluding the given entity
1448 func_72918_a handleMaterialAcceleration 2 handles the acceleration of an object whilst in water. Not sure if it is used elsewhere.
1449 func_72919_O getHorizon 2 Returns horizon height for use in rendering the sky.
1450 func_72920_a getPendingBlockUpdates 2
1510 func_73026_a getEntityList 2
1511 func_73027_a addEntityToWorld 2 Add an ID to Entity mapping to entityHashSet
1512 func_73028_b removeEntityFromWorld 2
1513 func_73029_E doVoidFogParticles 2
1514 func_73030_b getEntitySpawnQueue 2
1515 func_73031_a invalidateBlockReceiveRegion 2 Invalidates an AABB region of blocks from the receive queue, in the event that the block has been modified client-side in the intervening 80 receive ticks.
1516 func_73039_n getEntityTracker 2 Gets the EntityTracker
1656 func_73473_d getText 2
1657 func_73475_d getIsServer 2 Get whether this is a server
1658 func_73489_c getMetadata 2
1659 func_73509_c getWatchedMetadata 2
1660 func_73568_g getEffectY 2
1661 func_73569_h getEffectZ 2
1662 func_73570_d getSoundName 2
1667 func_73581_d getNumberOfChunkInPacket 2
1668 func_73582_a getChunkPosX 2
1669 func_73583_c getChunkCompressedData 2
1670 func_73593_d getCompressedChunkData 2
1671 func_73594_a getMapChunkData 2
1672 func_73607_d getPlayerVelocityX 2 Gets the X velocity of the player being pushed by the explosion.
1673 func_73608_g getPlayerVelocityZ 2 Gets the Z velocity of the player being pushed by the explosion.
1674 func_73609_f getPlayerVelocityY 2 Gets the Y velocity of the player being pushed by the explosion.
1675 func_73660_a update 2 Updates the JList with a new model.
1676 func_73665_c getPropertiesFile 2 Returns this PropertyManager's file object used for property saving.
1677 func_73666_a logMessageAndSave 2 logs an info message then calls saveSettingsToFile Yes this appears to be a potential stack overflow - these 2 functions call each other repeatdly if an exception occurs.
1802 func_73892_a getSentHistory 2 input is relative and is applied directly to the sentHistoryCursor so -1 is the previous message, 1 is the next message from the current cursor position
1803 func_73895_u_ completePlayerName 2 Autocompletes player name
1804 func_73906_g wakeEntity 2 Wakes the entity from the bed
1805 func_73907_g getLeftBorder 2 Gets the distance from the left border of the window to left border of the controls screen
1806 func_73912_g makeUseableName 2 Makes a the name for a world save folder based on your world name, replacing specific characters for _s and appending -s to the end until a free name is available.
1807 func_73914_h updateButtonText 2
1808 func_73945_e copyLinkToClipboard 2 Copies the link to the system clipboard.
2471 func_75757_d loadWorldInfo 2 Loads and returns the world info
2472 func_75758_b getMapFileFromName 2 Gets the file location of the given map
2473 func_75759_a flush 2 Called to flush all changes to disk, waiting for them to complete.
2474 func_75760_g getSaveDirectoryName getWorldDirectoryName 2 Returns the name of the directory where world information is saved.
2475 func_75761_a saveWorldInfo 2 Saves the passed in world info.
2476 func_75762_c checkSessionLock 2 Checks the session lock to prevent save collisions
2477 func_75763_a getChunkLoader 2 Returns the chunk loader with the provided world provider
2478 func_75764_a getPlayerData 2 Gets the player data for the given playername as a NBTTagCompound.
2479 func_75765_b getSaveDirectory getWorldDirectory 2 gets the File object corresponding to the base directory of this save (saves/404 for a save called 404 etc) Gets the File object corresponding to the base directory of this world.
2480 func_75766_h setSessionLock 2 Creates a session lock file for this process
2481 func_75773_a canContinue 2 Determine if a specific AI Task should continue being executed.
2482 func_75774_a onUpdateTasks 2
2515 func_75821_a writeChunkNBTTags 2
2516 func_75822_a checkedReadChunkFromNBT 2 Wraps readChunkFromNBT. Checks the coordinates and several NBT tags.
2517 func_75823_a readChunkFromNBT 2 Reads the data stored in the passed NBTTagCompound and creates a Chunk with that data in the passed World. Returns the created Chunk.
2518 func_75824_a addChunkToPending 2
2519 func_75829_a distanceTo 2 Returns the linear distance to another path point
2520 func_75830_a makeHash 2
2521 func_75831_a isAssigned 2 Returns true if this point has already been assigned to a path
2569 func_75905_a initWorldGenSeed 2 Initialize layer's local worldGenSeed based on its own baseSeed and the world's global seed (passed in as an argument).
2570 func_75912_b choose 2 randomly choose between the four args
2571 func_75913_a choose 2 randomly choose between the two args
2572 func_75915_a magnify 2 Magnify a layer. Parms are seed adjustment, layer, number of times to magnify
2573 func_75916_b modeOrRandom 2 returns the mode (most frequently occuring number) or a random number from the 4 integers provided
2574 func_75917_a choose 2 Chooses one of the two inputs randomly.
2575 func_75918_d initCraftableStats 2 Initializes statistics related to craftable items. Is only called after both block and item stats have been initialized.
2660 func_76127_a average 2
2661 func_76128_c floor_double 2 Returns the greatest integer less than or equal to the double argument
2662 func_76129_c sqrt_float 2
2663 func_76130_a abs_int 2 Returns the unsigned value of an int.
2664 func_76131_a clamp_float 2 Returns the value of the first parameter, clamped to be within the lower and upper limits given by the second and third parameters
2665 func_76132_a abs_max 2 Maximum of the absolute value of two numbers.
2666 func_76133_a sqrt_double 2
3365 func_77833_h isEffectInstant 2
3366 func_77834_f getEffects 2 Returns a list of effects for the specified potion damage value.
3367 func_77840_a spawnCreature 2 Spawns the creature specified by the egg's type in the location specified by the last three parameters. Parameters: world, entityID, x, y, z.
3368 func_77842_f getMaterialName 2 Returns the name of the material this tool is made from as it is declared in EnumToolMaterial (meaning diamond would return "EMERALD")
3369 func_77844_a setPotionEffect 2 sets a potion effect on the item. Args: int potionId, int duration (will be multiplied by 20), int amplifier, float probability of effect happening
3370 func_77845_h isWolfsFavoriteMeat 2 Whether wolves like this food (true for raw and cooked porkchop).
3371 func_77846_g getSaturationModifier 2 gets the saturationModifier of the ItemFood
3602 func_78570_q renderStandardBlock 2 Renders a standard cube block at the given coordinates
3603 func_78571_c renderPistonRodEW 2 Render piston rod east/west
3604 func_78572_c renderBlockTorch 2 Renders a torch block at the given coordinates
3605 func_78573_e renderNorthFace renderFaceXNeg 2 Renders the given texture to the north (x-negative) face of the block. Args: block, x, y, z, texture Renders the given texture to the west (x-negative) face of the block. Args: block, x, y, z, texture
3606 func_78574_w renderBlockBed 2 render a bed at the given coordinates
3607 func_78575_a renderBlockStemSmall 2 Render block stem small
3608 func_78576_j renderBlockLadder 2 Renders a ladder block at the given coordinates
3634 func_78602_a getAoBrightness 2 Get ambient occlusion brightness
3635 func_78603_m renderBlockStem 2 Render block stem
3636 func_78604_a renderBlockUsingTexture 2 Renders a block using the given texture instead of the block's own default texture
3637 func_78605_f renderSouthFace renderFaceXPos 2 Renders the given texture to the south (x-positive) face of the block. Args: block, x, y, z, texture Renders the given texture to the east (x-positive) face of the block. Args: block, x, y, z, texture
3638 func_78606_a renderBlockStemBig 2 Render block stem big
3639 func_78607_b renderPistonRodSN 2 Render piston rod south/north
3640 func_78608_c renderPistonExtension 2 renders the pushing part of a piston
3641 func_78609_c renderStandardBlockWithColorMultiplier 2 Renders a standard cube block at the given coordinates, with a given color ratio. Args: block, x, y, z, r, g, b
3642 func_78610_x renderBlockRepeater 2 render a redstone repeater at the given coordinates
3643 func_78611_c renderEastFace renderFaceZNeg 2 Renders the given texture to the east (z-negative) face of the block. Args: block, x, y, z, texture Renders the given texture to the north (z-negative) face of the block. Args: block, x, y, z, texture
3644 func_78612_b renderBlockByRenderType 2 Renders the block at the given coordinates using the block's rendering type
3645 func_78613_a renderBottomFace renderFaceYNeg 2 Renders the given texture to the bottom face of the block. Args: block, x, y, z, texture
3646 func_78614_n renderBlockCrops 2 Render block crops
3647 func_78615_a renderBlockCauldron 2 Render block cauldron
3648 func_78616_a renderBlockCocoa 2 Renders a Cocoa block at the given coordinates
3649 func_78617_b renderTopFace renderFaceYPos 2 Renders the given texture to the top face of the block. Args: block, x, y, z, texture
3650 func_78618_a renderBlockDragonEgg 2
3651 func_78619_g renderBlockTripWire 2 Renders a trip wire block at the given coordinates
3652 func_78620_l renderCrossedSquares 2 Renders any block requiring croseed squares such as reeds, flowers, and mushrooms
3653 func_78621_p renderBlockFluids 2 Renders a block based on the BlockFluids class at the given coordinates
3654 func_78622_d renderWestFace renderFaceZPos 2 Renders the given texture to the west (z-positive) face of the block. Args: block, x, y, z, texture Renders the given texture to the south (z-positive) face of the block. Args: block, x, y, z, texture
3655 func_78623_a renderTorchAtAngle 2 Renders a torch at the given coordinates, with the base slanting at the given delta
3656 func_78713_a getEntityRenderObject 2
3657 func_78714_a getDistanceToCamera 2
3783 func_82131_u updateState 2 Checks if the Beacon has a valid pyramid underneath and direct sunlight above
3784 func_82132_j getSecondaryEffect 2 Return the secondary potion effect given by this beacon.
3785 func_82141_a copyDataFrom 2 Copies important data from another entity to this entity. Used when teleporting entities between worlds, as this actually deletes the teleporting entity and re-creates it on the other side. Params: Entity to copy from, unused (always true)
3786 func_82142_c setHasActivePotion setInvisible 2
3787 func_82144_au doesEntityNotTriggerPressurePlate 2 Return whether this entity should NOT trigger a pressure plate or a tripwire.
3788 func_82145_z getMaxInPortalTime 2 Return the amount of time this entity should stay in a portal before being transported.
3789 func_82147_ab getPortalCooldown 2 Return the amount of cooldown before this entity can use a portal again.
3790 func_82150_aj func_82148_at getHasActivePotion getTeleportDirection 2
3791 func_82150_aj isInvisible 2
3792 func_82154_e setIsAnvil 2
3793 func_82159_b getArmorPosition 2
3794 func_82160_b dropEquipment 2 Drop the equipment for this entity.
3831 func_82245_bX isSpawnForced 2
3832 func_82246_f canCurrentToolHarvestBlock 2 Returns true if the item the player is holding can harvest the block at the given coords. Args: x, y, z.
3833 func_82247_a canPlayerEdit 2
3834 func_82265_c setEnabled 2
3835 func_82266_h setDisabledTextColour 2
3836 func_82273_a setFlatGeneratorInfo 2
3837 func_82274_h getRenderItem 2
3838 func_82275_e getFlatGeneratorInfo 2
3861 func_82357_ak getSpawnProtectionSize 2 Return the spawn protection area's size.
3862 func_82358_a isUsernameIndex 2 Return whether the specified command parameter index is a username parameter.
3863 func_82362_a getRequiredPermissionLevel 2 Return the required permission level for this command.
3864 func_82363_b parseDouble 2 Parses a double from the given string or throws an exception if it's not a double.
3865 func_82364_d getDifficultyForName 2 Return the difficulty value for the specified string.
3866 func_82366_d getGameRules 2 Return the game rule set this command should be able to manipulate.
3867 func_82369_d getAllOnlineUsernames 2 Return all usernames currently connected to the server.
3895 func_82464_d stopAllSounds 2 Stops all currently playing sounds
3896 func_82465_b isEntitySoundPlaying 2 Returns true if a sound is currently associated with the given entity, or false otherwise.
3897 func_82466_e pauseAllSounds 2 Pauses all currently playing sounds
3898 func_82467_a playEntitySound 2 If a sound is already playing from the given entity, update the position and velocity of that sound to match the entity. Otherwise, start playing a sound from that entity. Args: The sound name, the entity, the volume, the pitch, unknown flag If a sound is already playing from the given entity, update the position and velocity of that sound to match the entity. Otherwise, start playing a sound from that entity. Setting the last flag to true will prevent other sounds from overriding this one. Args: The sound name, the entity, the volume, the pitch, priority
3899 func_82468_a setEntitySoundVolume 2 Sets the volume of the sound associated with the given entity, if one is playing. The volume is scaled by the global sound volume. Args: the entity, the volume (from 0 to 1)
3900 func_82469_c stopEntitySound 2 Stops playing the sound associated with the given entity
3901 func_82482_a dispense 2 Dispenses the specified ItemStack from a dispenser.
3904 func_82487_b dispenseStack 2 Dispense the specified stack, play the dispense sound and spawn particles.
3905 func_82489_a spawnDispenseParticles 2 Order clients to display dispense particles from the specified block and facing.
3906 func_82499_a getProjectileEntity 2 Return the projectile entity spawned by this dispense behavior.
3907 func_82505_u_ isFlowerPot 2 Returns true only if block is flowerPot
3908 func_82519_a_ onFinishFalling 2 Called when the falling block entity for this block hits the ground and turns back into a block
3909 func_82520_a onStartFalling 2 Called when the falling block entity for this block is created
3910 func_82524_c isRedstoneRepeaterBlockID 2
3918 func_82538_d canConnectWallTo 2 Return whether an adjacent block can connect to a wall.
3919 func_82543_e isBlockStairsID 2 Checks if supplied ID is one of a BlockStairs
3920 func_82547_a comparePlayers 2 Compare the position of two players.
3921 func_82558_j getWalkSpeed 2
3922 func_82560_d getRelativeVolumeDisabled 2
3923 func_82563_j getShowCape 2
3924 func_82571_y getGeneratorOptions 2
3925 func_82572_b incrementTotalWorldTime 2
4054 func_82879_c sendSettingsToServer 2 Send a client info packet with settings information to the server
4055 func_82883_a getUnicodeFlag 2 Get unicodeFlag controlling whether strings should be rendered with Unicode fonts instead of the default.png font.
4056 func_82889_a getBatSize 2 not actually sure this is size, is not used as of now, but the model would be recreated if the value changed and it seems a good match for a bats size
4057 func_83003_a getMemoryReport 2 Returns a string with allocated and used memory.
4058 func_83005_z getBlockBoundsMinZ 2 returns the block bounderies minZ value
4059 func_83006_A getBlockBoundsMaxZ 2 returns the block bounderies maxZ value
4060 func_83007_w getBlockBoundsMaxX 2 returns the block bounderies maxX value
4084 func_85058_a makeCategory 2 Creates a CrashReportCategory
4085 func_85062_a callBlockDataValue 2
4086 func_85064_a callBlockLocationInfo 2
4087 func_85071_a getLocationInfo 2 Returns a string with world information on location.Args:x,y,z
4088 func_85079_a callBlockType 2
4089 func_85085_a callSuspiciousClasses 2
4090 func_85093_e renderArrowsStuckInEntity 2 renders arrows the Entity has been attacked with, attached to it
4123 func_85151_d getLowerChestInventory 2 Return this chest container's lower chest inventory.
4124 func_85154_a callEntityType 2
4125 func_85156_a removeTask 2 removes the indicated task from the entity's AI tasks.
4126 func_85157_q isAlwaysHarvested 2 Check to see if we can harvest it in any case.
4127 func_85158_p setAlwaysHarvested 2 Set as harvestable in any case.
4128 func_85160_a callStructureType 2
4129 func_85162_a callChunkPositionHash 2
4130 func_85170_a callServerType 2
4132 func_85175_e blockGetRenderType 2 Returns the render type of the block at the given coordinate.
4133 func_85176_s getDefaultTeleporter 2
4134 func_85181_a getRandomModelBox 2
4135 func_85182_a sameToolAndBlock 2
4136 func_85187_a drawString 2 Draws the specified string. Args: string, x, y, color, dropShadow
4137 func_85188_a makePortal 2
4138 func_85189_a removeStalePortalLocations 2 called periodically to remove out-of-date portal locations from the cache list. Argument par1 is a WorldServer.getTotalWorldTime() value.
4139 func_90010_a isPartOfLargeChest 2 Return whether the given inventory is part of this large chest.
4140 func_90011_a createChild 2
4141 func_90019_g applyRenderColor 2 Creates a new EntityDiggingFX with the block render color applied to the base particle color
4159 func_92059_d getEntityItem 2 Returns the ItemStack corresponding to the Entity (Note: if no item exists, will log an error but still return an ItemStack containing Block.stone)
4160 func_92062_k sendChatMsg 2 Sends the given string to every player as chat message.
4161 func_92085_d getIsBlank 2
4162 func_92087_a causeThornsDamage 2 Returns the EntityDamageSource of the Thorns enchantment
4163 func_92089_a canApply 2
4164 func_92097_a negateDamage 2 Used by ItemStack.attemptDamageItem. Randomly determines if a point of damage should be negated using the enchantment level (par1). If the ItemStack is Armor then there is a flat 60% chance for damage to be negated no matter the enchantment level, otherwise there is a 1-(par/1) chance for damage to be negated.
4165 func_92103_a addRecipe 2
4166 func_94041_b isStackValidForSlot 2 Returns true if automation is allowed to insert the given stack (ignoring stack size) into the given slot.
4167 func_94042_c isInvNameLocalized 2 If this returns false, the inventory name will be used as an unlocalized name, and translated into the player's language. Otherwise it will be used directly.
4168 func_94049_a setCustomName 2
4169 func_94052_a setParticleIcon 2
4170 func_94053_h nextTextureIndexX 2
4171 func_94064_a displayGUIHopper 2
4172 func_94065_a drawTexturedModelRectFromIcon 2
4173 func_94127_c func_94083_c getStartInventorySide getTntPlacedBy 2 Get the start of the side inventory. returns null or the entityliving it was placed or ignited by
4174 func_94128_d func_94085_r getSizeInventorySide getDefaultDisplayTileOffset 2 Get the size of the side inventory.
4175 func_94086_l setDisplayTileOffset 2
4176 func_94087_l getMinecartType 2
4177 func_94089_m getDisplayTile 2
4178 func_94090_a createMinecart 2 Creates a new minecart of the specified type in the specified location in the given world. par0World - world to create the minecart in, double par1,par3,par5 represent x,y,z respectively. int par7 specifies the type: 1 for MinecartChest, 2 for MinecartFurnace, 3 for MinecartTNT, 4 for MinecartMobSpawner, 5 for MinecartHopper and 0 for a standard empty minecart
4179 func_94091_a updateOnTrack 2
4180 func_94092_k setDisplayTileData 2
4181 func_94093_n getDefaultDisplayTile 2
4182 func_94094_j setDisplayTile 2
4183 func_94095_a killMinecart 2
4184 func_94096_e setHasDisplayTile 2
4185 func_94097_p getDefaultDisplayTileData 2
4186 func_94098_o getDisplayTileData 2
4187 func_94099_q getDisplayTileOffset 2
4188 func_94100_s hasDisplayTile 2
4189 func_94101_h applyDrag 2
4190 func_94103_c explodeCart 2 Makes the minecart explode.
4191 func_94105_c ignite 2 Ignites this TNT cart.
4192 func_94107_f setMinecartPowered 2
4193 func_94108_c isMinecartPowered 2
4194 func_94114_a areItemStacksEqualItem 2
4195 func_94116_j insertItemToInventory 2 Inserts one item from the hopper into the inventory the hopper is pointing at.
4196 func_94117_a insertStack 2 Inserts a stack into an inventory. Args: Inventory, stack, side. Returns leftover items.
4197 func_94119_v getOutputInventory 2 Gets the inventory the hopper is pointing at.
4198 func_94128_d getAccessibleSlotsFromSide 2 Returns an array containing the indices of the slots that can be accessed by automation on the given side of this block.
4199 func_94140_a registerDestroyBlockIcons 2
4200 func_94143_a updateIcons 2
4201 func_94148_a func_94144_a renderItemStack renderBlockInMinecart 2 Renders the block that is inside the minecart.
4202 func_94148_a renderItemOverlayIntoGUI 2
4203 func_94149_a renderIcon 2
4204 func_94152_c refreshTextureMaps 2
4205 func_94156_a intersection 2
4270 func_94281_a copyFrom 2
4271 func_94282_c getGlTextureId 2
4272 func_94284_b getTextureId 2
4273 func_94285_g createTexture uploadTexture 2
4274 func_94305_f doStitch 2
4275 func_94306_e getTexture 2
4276 func_94308_a getCeilPowerOf2 2 Returns power of 2 >= the specified value
4278 func_94310_b allocateSlot 2 Attempts to find space for specified tile
4279 func_94311_c expandAndAllocateSlot 2 Expand stitched texture in order to make space for specified tile
4280 func_94312_a addStitchHolder 2
4281 func_94327_t_ getItemIconName 2 Gets the icon name of the ItemBlock corresponding to this block. Used by hoppers.
4282 func_94328_b_ getComparatorInputOverride 2 If hasComparatorInputOverride returns true, the return value from this is used instead of the redstone signal strength when this block inputs to a comparator.
4283 func_94329_b isAssociatedBlockID 2 Static version of isAssociatedBlockID.
4284 func_94330_A getUnlocalizedName2 2 Returns the unlocalized name without the tile. prefix. Caution: client-only.
4285 func_94331_a canPlaceBlockOnSide 2
4286 func_94332_a registerIcons 2 When this method is called, your block should register all the icons it needs with the given IconRegister. This is the only chance you get to register icons.
4287 func_94334_h isAssociatedBlockID 2 Returns true if the given block ID is equivalent to this one. Example: redstoneTorchOn matches itself and redstoneTorchOff, and vice versa. Most blocks only match themselves.
4288 func_94350_c getPowerSupply 2 Argument is metadata. Returns power level (0-15)
4289 func_94351_d getPlateState 2 Returns the current state of the pressure plate. Returns a value between 0 and 15 based on the number of items on it.
4290 func_94352_a getSensitiveAABB 2
4291 func_94355_d getMetaFromWeight 2 Argument is weight (0-15). Return the metadata to be set because of it.
4292 func_94434_o getIconSideOverlay 2
4293 func_94442_h_ getInventory 2 Gets the inventory of the chest at the specified coords, accounting for blocks or ocelots on top of the chest, and double chests.
4294 func_94444_j_ updateLightLevel 2
4295 func_94446_i getBeaconIcon 2
4296 func_94448_e getBrewingStandIcon 2
4297 func_94451_c getDirectionFromMetadata 2
4298 func_94452_d getIsBlockNotPoweredFromMetadata 2
4299 func_94453_b getHopperIcon 2
4300 func_94501_a getRailLogic 2
4301 func_94502_a isMinecartTrack 2
4302 func_94503_c canConnectFrom 2
4303 func_94504_a setBasicRail 2
4304 func_94505_a getNumberOfAdjacentTracks 2
4305 func_94506_c connectToNeighbor 2
4306 func_94507_b canConnectTo 2
4307 func_94508_a isRailChunkPositionCorrect 2 Checks if the rail is at the chunk position it is expected to be.
4308 func_94509_b refreshConnectedTracks 2
4309 func_94510_b isPartOfTrack 2
4310 func_94520_b containsTranslateKey 2
4311 func_94526_b calcRedstoneFromInventory 2
4312 func_94539_a setExplosionSource 2
4313 func_94540_d setExplosion 2
4314 func_94541_c isExplosion 2
4317 func_94573_a isBlockTickScheduled 2 Returns true if the given block will receive a scheduled tick in the future. Args: X, Y, Z, blockID
4318 func_94574_k getIndirectPowerOutput 2 Returns the indirect signal strength being outputted by the given block in the *opposite* of the given direction. Args: X, Y, Z, direction
4319 func_94575_c setBlock 2 Sets a block and notifies relevant systems with the block change Args: x, y, z, blockID
4320 func_94576_a getEntitiesWithinAABBExcludingEntity 2
4321 func_94577_B getBlockPowerInput 2 Returns the highest redstone signal strength powering the given block. Args: X, Y, Z.
4322 func_94578_a destroyBlock 2 Destroys a block and optionally drops items. Args: X, Y, Z, dropItems
4323 func_94581_a updateIcons registerIcons 2
4324 func_94599_c getItemIconForUseDuration 2 used to cycle through icons based on their used duration, i.e. for the bow
4325 func_94608_d getItemSpriteNumber 2
4326 func_94609_a callTileEntityID 2
4327 func_94611_a callTileEntityDataInfo 2
4328 func_94901_k getSpriteNumber 2 Returns 0 for /terrain.png, 1 for /gui/items.png
4329 func_96090_ax getTranslatedEntityName 2 Returns the translated name of the entity.
4330 func_96095_a onActivatorRailPass 2 Called every tick the minecart is on an activator rail.
4331 func_96096_ay isIgnited 2 Returns true if the TNT minecart is ignited.
4332 func_96104_c setCommandSenderName 2 Sets the name of the command sender
4333 func_96107_aA getXPos 2 Gets the world X position for this hopper entity.
4334 func_96108_aC getZPos 2 Gets the world Z position for this hopper entity.
4335 func_96109_aB getYPos 2 Gets the world Y position for this hopper entity.
4336 func_96110_f setBlocked 2 Set whether this hopper minecart is being blocked by an activator rail.
4337 func_96111_ay getBlocked 2 Get whether this hopper minecart is being blocked by an activator rail.
4338 func_96115_a setInventoryName 2
4339 func_96116_a suckItemsIntoHopper 2 Sucks one item into the given hopper from an inventory or EntityItem above it.
4340 func_96117_b getInventoryAtLocation 2 Gets an inventory at the given location to extract items into or take items from. Can find either a tile entity or regular entity implementing IInventory.
4341 func_96118_b getInventoryAboveHopper 2 Looks for anything, that can hold items (like chests, furnaces, etc.) one block above the given hopper.
4342 func_96123_co getWorldScoreboard 2
4343 func_96124_cp getTeam 2
4344 func_96125_a displayGUIHopperMinecart 2
4345 func_96334_d getScoreboardFromWorldServer 2
4346 func_96335_a getScoreObjectivesList 2 If the parameter is true, does not return read-only entries.
4347 func_96336_d getObjectivesList 2 Handler for the 'scoreboard objectives list' command.
4348 func_96337_e removeObjective 2 Handler for the 'scoreboard objectives remove' command.
4349 func_96338_a getTeam 2 Returns the ScorePlayerTeam for the given team name.
4350 func_96339_l setPlayerScore 2 Handler for the 'scoreboard players [add|remove|set]' commands.
4351 func_96340_c addTeam 2 Handler for the 'scoreboard teams add' command.
4352 func_96341_k listPlayers 2 Handler for the 'scoreboard players list' command.
4353 func_96342_g joinTeam 2 Handler for the 'scoreboard teams join' command.
4354 func_96343_e removeTeam 2 Handler for the 'scoreboard teams remove' command.
4355 func_96344_f getTeamList 2 Handler for the 'scoreboard teams list' command.
4356 func_96345_a getScoreObjective 2 User-safe version of Scoreboard.getObjective, does checks against the objective not being found and whether it's read-only or not. If true, the second parameter makes the function throw an exception if the objective is read-only.
4357 func_96346_i emptyTeam 2 Handler for the 'scoreboard teams empty' command.
4358 func_96347_j setObjectivesDisplay 2 Handler for the 'scoreboard objectives setdisplay' command.
4359 func_96348_d setTeamOption 2 Handler for the 'scoreboard teams option' command.
4360 func_96349_h leaveTeam 2 Handler for the 'scoreboard teams leave' command.
4361 func_96350_b addObjective 2 Handler for the 'scoreboard objectives add' command.
4362 func_96351_m resetPlayerScore 2 Handler for the 'scoreboard players reset' command.
4363 func_96435_a handleSetPlayerTeam 2 Handle a set player team packet.
4364 func_96436_a handleSetObjective 2 Handle a set objective packet.
4365 func_96437_a handleSetScore 2 Handle a set score packet.
4366 func_96438_a handleSetDisplayObjective 2 Handle a set display objective packet.
4367 func_96439_d notifyBlocksOfNeighborChange 2 Calls notifyBlockOfNeighborChange on adjacent blocks, except the one on the given side. Args: X, Y, Z, changingBlockID, side
4368 func_96441_U getScoreboard 2
4369 func_96444_a mixAoBrightness 2
4373 func_96448_c getMissingIcon 2
4374 func_96455_e getMissingIcon 2
4375 func_96468_q_ hasComparatorInputOverride 2 If this returns true, then comparators facing away from this block will use the value from getComparatorInputOverride instead of the actual redstone signal strength.
4376 func_96471_k updateMetadata 2 Updates the Metadata to include if the Hopper gets powered by Redstone or not
4377 func_96472_a getBehaviorForItemStack 2 Returns the behavior for the given ItemStack.
4378 func_96475_a_ getTileEntityComparator 2 Returns the blockTileEntity at given coordinates.
4379 func_96477_c markOrGrowMarked 2
4380 func_96478_d setBlockBoundsForSnowDepth 2 calls setBlockBounds based on the depth of the snow. Int is any values 0x0-0x7, usually this blocks metadata.
4381 func_96509_i getPlayersTeam 2 Gets the ScorePlayerTeam object for the given username.
4382 func_96512_b removePlayerFromTeam 2 Removes the given username from the given ScorePlayerTeam. If the player is not on the team then an IllegalStateException is thrown.
4383 func_96514_c getScoreObjectives 2
4384 func_96517_b getObjectiveDisplaySlot 2 Returns 'list' for 0, 'sidebar' for 1, 'belowName for 2, otherwise null.
4385 func_96518_b getObjective 2 Returns a ScoreObjective for the objective name
4386 func_96526_d getObjectiveNames 2
4387 func_96537_j getObjectiveDisplaySlotNumber 2 Returns 0 for (case-insensitive) 'list', 1 for 'sidebar', 2 for 'belowName', otherwise -1.
4388 func_96556_a callServerMemoryStats 2
4389 func_96557_a callServerProfiler 2
4390 func_96559_d getFrontOffsetY 2
4391 func_96563_a callEntityName 2
4392 func_96631_a attemptDamageItem 2 Attempts to damage the ItemStack with par1 amount of damage, If the ItemStack has the Unbreaking enchantment there is a chance for each point of damage to be negated. Returns true if it takes more damage than getMaxDamage(). Returns false otherwise or if the ItemStack can't be damaged or if all points of damage are negated.
4393 func_96632_a callItemDisplayName 2
4394 func_96637_b isReadOnly 2
4395 func_96670_d getMembershipCollection 2
4396 func_96678_d getDisplayName 2
4397 func_96679_b getName 2
4398 func_96680_c getCriteria 2
4399 func_96681_a setDisplayName 2
4400 func_96682_a getScoreboard 2
4401 func_98033_al getLogAgent 2
4402 func_98035_c addNotRiddenEntityID 2
4403 func_98042_n setTransferTicker 2 Sets the transfer ticker, used to determine the delay between transfers.
4404 func_98043_aE canTransfer 2 Returns whether the hopper cart can currently transfer an item.
4405 func_98046_c setTransferCooldown 2
4406 func_98047_l isCoolingDown 2
4407 func_98052_bS canPickUpLoot 2
4408 func_98053_h setCanPickUpLoot 2
4409 func_98076_a getServerLogger 2
4410 func_98145_a createEmptyTexture 2
4411 func_98146_d getBasename 2 Strips directory and file extension from the specified path, returning only the filename
4412 func_98147_a hasAnimationTxt 2 Returns true if specified texture pack contains animation data for the specified texture file
4413 func_98152_d getAllUsernames 2
4414 func_98179_a computeLightValue 2
4415 func_98180_V getWorldLogAgent 2
4416 func_98182_a handleWorldParticles 2 Handle a world particles packet.
4417 func_98184_a setupTextureExt 2
4418 func_98185_a resetBoundTexture 2
4419 func_98186_a colorToAnaglyph 2
4420 func_98187_b bindTexture 2
4421 func_98194_g getPositionY 2 Gets the Y position of the particle.
4422 func_98195_d getParticleName 2
4423 func_98196_i getOffsetX 2 This is added to the X position after being multiplied by random.nextGaussian()
4424 func_98197_l getSpeed 2 Gets the speed of the particles.
4425 func_98198_h getPositionZ 2 Gets the Z position of the particle.
4426 func_98199_k getOffsetZ 2 This is added to the Z position after being multiplied by random.nextGaussian()
4427 func_98200_f getPositionX 2 Gets the X position of the particle.
4428 func_98201_j getOffsetY 2 This is added to the Y position after being multiplied by random.nextGaussian()
4429 func_98202_m getQuantity 2 Gets the number of particles to create.
4430 func_98213_d getHopperTile 2
4431 func_98225_a getPacketClass 2
4432 func_98230_d logFine 2
4433 func_98231_b logWarningFormatted 2
4434 func_98232_c logSevere 2
4435 func_98233_a logInfo 2
4436 func_98234_c logSevereException 2
4437 func_98235_b logWarningException 2
4438 func_98236_b logWarning 2
4439 func_98238_b setupLogger 2 Sets up the logger for usage.
4440 func_98243_a callPacketID 2
4441 func_98266_d getSpawnerZ 2
4442 func_98268_b setDelayToMin 2 Sets the delay to minDelay if parameter given is 1, else return false.
4443 func_98269_i getRandomMinecart 2
4444 func_98270_a readFromNBT 2
4445 func_98271_a getSpawnerWorld 2
4446 func_98272_a setMobID 2
4447 func_98274_c getSpawnerY 2
4448 func_98275_b getSpawnerX 2
4449 func_98276_e getEntityNameToSpawn 2 Gets the entity name that should be spawned.
4450 func_98277_a setRandomMinecart 2
4451 func_98278_g updateSpawner 2
4452 func_98279_f canRun 2 Returns true if there's a player close enough to this mob spawner to activate it.
4453 func_98280_b writeToNBT 2
4454 func_98304_a readFontData 2
4455 func_98305_c readFontTexture 2
4456 func_98306_d readGlyphSizes 2
+154 -69
View File
@@ -13,12 +13,13 @@ BlockButtonStone,net/minecraft/block
BlockButtonWood,net/minecraft/block
BlockCactus,net/minecraft/block
BlockCake,net/minecraft/block
BlockCarpet,net/minecraft/block
BlockCarrot,net/minecraft/block
BlockCauldron,net/minecraft/block
BlockChest,net/minecraft/block
BlockClay,net/minecraft/block
BlockCloth,net/minecraft/block
BlockCocoa,net/minecraft/block
BlockColored,net/minecraft/block
BlockCommandBlock,net/minecraft/block
BlockComparator,net/minecraft/block
BlockContainer,net/minecraft/block
@@ -51,6 +52,7 @@ BlockGlowStone,net/minecraft/block
BlockGrass,net/minecraft/block
BlockGravel,net/minecraft/block
BlockHalfSlab,net/minecraft/block
BlockHay,net/minecraft/block
BlockHopper,net/minecraft/block
BlockIce,net/minecraft/block
BlockJukeBox,net/minecraft/block
@@ -93,6 +95,7 @@ BlockRedstoneRepeater,net/minecraft/block
BlockRedstoneTorch,net/minecraft/block
BlockRedstoneWire,net/minecraft/block
BlockReed,net/minecraft/block
BlockRotatedPillar,net/minecraft/block
BlockSand,net/minecraft/block
BlockSandStone,net/minecraft/block
BlockSapling,net/minecraft/block
@@ -141,28 +144,23 @@ CallableClientMemoryStats,net/minecraft/client
CallableClientProfiler,net/minecraft/client
CallableGLInfo,net/minecraft/client
CallableLWJGLVersion,net/minecraft/client
CallableLaunchedVersion,net/minecraft/client
CallableModded,net/minecraft/client
CallableParticleScreenName,net/minecraft/client
CallableTexturePack,net/minecraft/client
CallableTickingScreenName,net/minecraft/client
CallableType2,net/minecraft/client
CallableUpdatingScreenName,net/minecraft/client
CanvasCrashReport,net/minecraft/client
CanvasMinecraftApplet,net/minecraft/client
CanvasMojangLogo,net/minecraft/client
EnumOSHelper,net/minecraft/client
GameWindowListener,net/minecraft/client
MinecraftAppletImpl,net/minecraft/client
MinecraftFakeLauncher,net/minecraft/client
PanelCrashReport,net/minecraft/client
Minecraft,net/minecraft/client
StatStringFormatKeyInv,net/minecraft/client
ThreadClientSleep,net/minecraft/client
ThreadShutdown,net/minecraft/client
CodecMus,net/minecraft/client/audio
MusInputStream,net/minecraft/client/audio
ScheduledSound,net/minecraft/client/audio
SoundManager,net/minecraft/client/audio
SoundManagerINNER1,net/minecraft/client/audio
SoundPool,net/minecraft/client/audio
SoundPoolEntry,net/minecraft/client/audio
SoundPoolProtocolHandler,net/minecraft/client/audio
SoundPoolURLConnection,net/minecraft/client/audio
AbstractClientPlayer,net/minecraft/client/entity
EntityClientPlayerMP,net/minecraft/client/entity
EntityOtherPlayerMP,net/minecraft/client/entity
EntityPlayerSP,net/minecraft/client/entity
@@ -201,9 +199,7 @@ GuiMerchant,net/minecraft/client/gui
GuiMultiplayer,net/minecraft/client/gui
GuiNewChat,net/minecraft/client/gui
GuiOptions,net/minecraft/client/gui
GuiParticle,net/minecraft/client/gui
GuiPlayerInfo,net/minecraft/client/gui
GuiProgress,net/minecraft/client/gui
GuiRenameWorld,net/minecraft/client/gui
GuiRepair,net/minecraft/client/gui
GuiScreen,net/minecraft/client/gui
@@ -211,14 +207,13 @@ GuiScreenAddServer,net/minecraft/client/gui
GuiScreenBook,net/minecraft/client/gui
GuiScreenConfigureWorld,net/minecraft/client/gui
GuiScreenConfirmation,net/minecraft/client/gui
GuiScreenCreateOnlineWorld,net/minecraft/client/gui
GuiScreenDemo,net/minecraft/client/gui
GuiScreenDisconnectedOnline,net/minecraft/client/gui
GuiScreenEditOnlineWorld,net/minecraft/client/gui
GuiScreenInvite,net/minecraft/client/gui
GuiScreenLongRunningTask,net/minecraft/client/gui
GuiScreenOnlineServers,net/minecraft/client/gui
GuiScreenResetWorld,net/minecraft/client/gui
GuiScreenOnlineServersSubscreen,net/minecraft/client/gui
GuiScreenSelectLocation,net/minecraft/client/gui
GuiScreenServerList,net/minecraft/client/gui
GuiScreenSubscription,net/minecraft/client/gui
@@ -240,22 +235,17 @@ GuiWorldSlot,net/minecraft/client/gui
GuiYesNo,net/minecraft/client/gui
LoadingScreenRenderer,net/minecraft/client/gui
MapItemRenderer,net/minecraft/client/gui
Particle,net/minecraft/client/gui
RunnableTitleScreen,net/minecraft/client/gui
ScaledResolution,net/minecraft/client/gui
ScreenChatOptions,net/minecraft/client/gui
SelectionListBase,net/minecraft/client/gui
SelectionListInvited,net/minecraft/client/gui
SelectionListLocation,net/minecraft/client/gui
TaskLongRunning,net/minecraft/client/gui
TaskOnlineConnect,net/minecraft/client/gui
TaskResetWorld,net/minecraft/client/gui
TaskWorldCreation,net/minecraft/client/gui
ThreadConnectToOnlineServer,net/minecraft/client/gui
ThreadCreateOnlineWorldScreen,net/minecraft/client/gui
ThreadOnlineConnect,net/minecraft/client/gui
ThreadOnlineScreen,net/minecraft/client/gui
ThreadPollServers,net/minecraft/client/gui
ThreadTitleScreen,net/minecraft/client/gui
GuiAchievement,net/minecraft/client/gui/achievement
GuiAchievements,net/minecraft/client/gui/achievement
GuiSlotStats,net/minecraft/client/gui/achievement
@@ -281,30 +271,50 @@ GuiDispenser,net/minecraft/client/gui/inventory
GuiEditSign,net/minecraft/client/gui/inventory
GuiFurnace,net/minecraft/client/gui/inventory
GuiInventory,net/minecraft/client/gui/inventory
GuiScreenHorseInventory,net/minecraft/client/gui/inventory
SlotCreativeInventory,net/minecraft/client/gui/inventory
GuiScreenBackup,net/minecraft/client/gui/mco
GuiScreenBackupDownloadThread,net/minecraft/client/gui/mco
GuiScreenBackupRestoreTask,net/minecraft/client/gui/mco
GuiScreenBackupSelectionList,net/minecraft/client/gui/mco
GuiScreenCreateOnlineWorld,net/minecraft/client/gui/mco
GuiScreenMcoWorldTemplate,net/minecraft/client/gui/mco
GuiScreenMcoWorldTemplateDownloadThread,net/minecraft/client/gui/mco
GuiScreenMcoWorldTemplateSelectionList,net/minecraft/client/gui/mco
GuiScreenPendingInvitation,net/minecraft/client/gui/mco
GuiScreenPendingInvitationINNER1,net/minecraft/client/gui/mco
GuiScreenPendingInvitationINNER2,net/minecraft/client/gui/mco
GuiScreenPendingInvitationINNER3,net/minecraft/client/gui/mco
GuiScreenPendingInvitationList,net/minecraft/client/gui/mco
GuiScreenResetWorld,net/minecraft/client/gui/mco
ScreenWithCallback,net/minecraft/client/gui/mco
TaskResetWorld,net/minecraft/client/gui/mco
TaskWorldCreation,net/minecraft/client/gui/mco
MainProxyAuthenticator,net/minecraft/client/main
MainShutdownHook,net/minecraft/client/main
Backup,net/minecraft/client/mco
BackupList,net/minecraft/client/mco
ExceptionMcoHttp,net/minecraft/client/mco
ExceptionMcoService,net/minecraft/client/mco
ExceptionRetryCall,net/minecraft/client/mco
Location,net/minecraft/client/mco
Locations,net/minecraft/client/mco
McoClient,net/minecraft/client/mco
McoOption,net/minecraft/client/mco
McoOptionNone,net/minecraft/client/mco
McoOptionSome,net/minecraft/client/mco
McoPair,net/minecraft/client/mco
McoServer,net/minecraft/client/mco
McoServerAddress,net/minecraft/client/mco
McoServerList,net/minecraft/client/mco
McoServerListINNER1,net/minecraft/client/mco
McoServerListEmptyAnon,net/minecraft/client/mco
McoServerListUpdateThread,net/minecraft/client/mco
McoServerListUpdateThreadComparer,net/minecraft/client/mco
PendingInvite,net/minecraft/client/mco
PendingInvitesList,net/minecraft/client/mco
Request,net/minecraft/client/mco
RequestDelete,net/minecraft/client/mco
RequestGet,net/minecraft/client/mco
RequestPost,net/minecraft/client/mco
RequestPut,net/minecraft/client/mco
TimerTaskMcoServerListUpdate,net/minecraft/client/mco
TimerTaskMcoServerListUpdateComparator,net/minecraft/client/mco
ValueObjectList,net/minecraft/client/mco
ValueObjectSubscription,net/minecraft/client/mco
WorldTemplate,net/minecraft/client/mco
WorldTemplateList,net/minecraft/client/mco
ModelBase,net/minecraft/client/model
ModelBat,net/minecraft/client/model
ModelBiped,net/minecraft/client/model
@@ -320,8 +330,10 @@ ModelDragon,net/minecraft/client/model
ModelEnderCrystal,net/minecraft/client/model
ModelEnderman,net/minecraft/client/model
ModelGhast,net/minecraft/client/model
ModelHorse,net/minecraft/client/model
ModelIronGolem,net/minecraft/client/model
ModelLargeChest,net/minecraft/client/model
ModelLeashKnot,net/minecraft/client/model
ModelMagmaCube,net/minecraft/client/model
ModelMinecart,net/minecraft/client/model
ModelOcelot,net/minecraft/client/model
@@ -354,7 +366,6 @@ GuiConnecting,net/minecraft/client/multiplayer
LanServer,net/minecraft/client/multiplayer
LanServerList,net/minecraft/client/multiplayer
NetClientHandler,net/minecraft/client/multiplayer
NetClientWebTextures,net/minecraft/client/multiplayer
PlayerControllerMP,net/minecraft/client/multiplayer
ServerAddress,net/minecraft/client/multiplayer
ServerData,net/minecraft/client/multiplayer
@@ -394,10 +405,13 @@ 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
CallableParticleScreenName,net/minecraft/client/renderer
CallableScreenName,net/minecraft/client/renderer
CallableScreenSize,net/minecraft/client/renderer
ChestItemRenderHelper,net/minecraft/client/renderer
@@ -413,15 +427,14 @@ ItemRenderer,net/minecraft/client/renderer
OpenGlCapsChecker,net/minecraft/client/renderer
OpenGlHelper,net/minecraft/client/renderer
RenderBlocks,net/minecraft/client/renderer
RenderEngine,net/minecraft/client/renderer
RenderGlobal,net/minecraft/client/renderer
RenderHelper,net/minecraft/client/renderer
RenderList,net/minecraft/client/renderer
RenderSorter,net/minecraft/client/renderer
StitcherException,net/minecraft/client/renderer
Tessellator,net/minecraft/client/renderer
ThreadDownloadImage,net/minecraft/client/renderer
ThreadDownloadImageData,net/minecraft/client/renderer
ThreadDownloadImageDataINNER1,net/minecraft/client/renderer
WorldRenderer,net/minecraft/client/renderer
ClippingHelper,net/minecraft/client/renderer/culling
ClippingHelperImpl,net/minecraft/client/renderer/culling
@@ -473,17 +486,24 @@ RenderWither,net/minecraft/client/renderer/entity
RenderWolf,net/minecraft/client/renderer/entity
RenderXPOrb,net/minecraft/client/renderer/entity
RenderZombie,net/minecraft/client/renderer/entity
AbstractTexture,net/minecraft/client/renderer/texture
DynamicTexture,net/minecraft/client/renderer/texture
IconRegister,net/minecraft/client/renderer/texture
Rect2i,net/minecraft/client/renderer/texture
LayeredTexture,net/minecraft/client/renderer/texture
SimpleTexture,net/minecraft/client/renderer/texture
StitchHolder,net/minecraft/client/renderer/texture
StitchSlot,net/minecraft/client/renderer/texture
Stitcher,net/minecraft/client/renderer/texture
Texture,net/minecraft/client/renderer/texture
TextureAtlasSprite,net/minecraft/client/renderer/texture
TextureClock,net/minecraft/client/renderer/texture
TextureCompass,net/minecraft/client/renderer/texture
TextureManager,net/minecraft/client/renderer/texture
TextureManagerINNER1,net/minecraft/client/renderer/texture
TextureMap,net/minecraft/client/renderer/texture
TextureStitched,net/minecraft/client/renderer/texture
TextureObject,net/minecraft/client/renderer/texture
TextureUtil,net/minecraft/client/renderer/texture
Tickable,net/minecraft/client/renderer/texture
TickableTextureObject,net/minecraft/client/renderer/texture
RenderEndPortal,net/minecraft/client/renderer/tileentity
RenderEnderCrystal,net/minecraft/client/renderer/tileentity
RenderItemFrame,net/minecraft/client/renderer/tileentity
@@ -497,20 +517,55 @@ TileEntityRendererPiston,net/minecraft/client/renderer/tileentity
TileEntitySignRenderer,net/minecraft/client/renderer/tileentity
TileEntitySkullRenderer,net/minecraft/client/renderer/tileentity
TileEntitySpecialRenderer,net/minecraft/client/renderer/tileentity
AbstractResourcePack,net/minecraft/client/resources
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
GuiScreenTemporaryResourcePackSelectSelectionList,net/minecraft/client/resources
I18n,net/minecraft/client/resources
Language,net/minecraft/client/resources
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
ResourcePackFileNotFoundException,net/minecraft/client/resources
ResourcePackRepository,net/minecraft/client/resources
ResourcePackRepositoryEntry,net/minecraft/client/resources
ResourcePackRepositoryFilter,net/minecraft/client/resources
SimpleReloadableResourceManager,net/minecraft/client/resources
SimpleReloadableResourceManagerINNER1,net/minecraft/client/resources
SimpleResource,net/minecraft/client/resources
AnimationFrame,net/minecraft/client/resources/data
AnimationMetadataSection,net/minecraft/client/resources/data
AnimationMetadataSectionSerializer,net/minecraft/client/resources/data
BaseMetadataSectionSerializer,net/minecraft/client/resources/data
FontMetadataSection,net/minecraft/client/resources/data
FontMetadataSectionSerializer,net/minecraft/client/resources/data
LanguageMetadataSection,net/minecraft/client/resources/data
LanguageMetadataSectionSerializer,net/minecraft/client/resources/data
MetadataSection,net/minecraft/client/resources/data
MetadataSectionSerializer,net/minecraft/client/resources/data
MetadataSerializer,net/minecraft/client/resources/data
MetadataSerializerEmptyAnon,net/minecraft/client/resources/data
MetadataSerializerRegistration,net/minecraft/client/resources/data
PackMetadataSection,net/minecraft/client/resources/data
PackMetadataSectionSerializer,net/minecraft/client/resources/data
TextureMetadataSection,net/minecraft/client/resources/data
TextureMetadataSectionSerializer,net/minecraft/client/resources/data
EnumOptions,net/minecraft/client/settings
EnumOptionsHelper,net/minecraft/client/settings
GameSettings,net/minecraft/client/settings
KeyBinding,net/minecraft/client/settings
StatPlaceholder,net/minecraft/client/stats
GuiTexturePackSlot,net/minecraft/client/texturepacks
GuiTexturePacks,net/minecraft/client/texturepacks
ITexturePack,net/minecraft/client/texturepacks
TexturePackCustom,net/minecraft/client/texturepacks
TexturePackDefault,net/minecraft/client/texturepacks
TexturePackDownloadSuccess,net/minecraft/client/texturepacks
TexturePackFolder,net/minecraft/client/texturepacks
TexturePackImplementation,net/minecraft/client/texturepacks
TexturePackList,net/minecraft/client/texturepacks
CommandBase,net/minecraft/command
CommandClearInventory,net/minecraft/command
CommandDebug,net/minecraft/command
@@ -547,6 +602,8 @@ CommandServerTp,net/minecraft/command
CommandServerWhitelist,net/minecraft/command
CommandSetSpawnpoint,net/minecraft/command
CommandShowSeed,net/minecraft/command
CommandSpreadPlayers,net/minecraft/command
CommandSpreadPlayersPosition,net/minecraft/command
CommandTime,net/minecraft/command
CommandToggleDownfall,net/minecraft/command
CommandWeather,net/minecraft/command
@@ -645,12 +702,6 @@ EnchantmentUntouching,net/minecraft/enchantment
EnchantmentWaterWorker,net/minecraft/enchantment
EnumEnchantmentType,net/minecraft/enchantment
IEnchantmentModifier,net/minecraft/enchantment
CallableEffectAmplifier,net/minecraft/entity
CallableEffectDuration,net/minecraft/entity
CallableEffectID,net/minecraft/entity
CallableEffectIsAmbient,net/minecraft/entity
CallableEffectIsSplash,net/minecraft/entity
CallableEffectName,net/minecraft/entity
CallableEntityName,net/minecraft/entity
CallableEntityTracker,net/minecraft/entity
CallableEntityType,net/minecraft/entity
@@ -662,8 +713,12 @@ EntityCreature,net/minecraft/entity
EntityEggInfo,net/minecraft/entity
EntityFlying,net/minecraft/entity
EntityHanging,net/minecraft/entity
EntityLeashKnot,net/minecraft/entity
EntityList,net/minecraft/entity
EntityLiving,net/minecraft/entity
EntityLivingBase,net/minecraft/entity
EntityLivingData,net/minecraft/entity
EntityOwnable,net/minecraft/entity
EntitySelectorArmoredMob,net/minecraft/entity
EntityTracker,net/minecraft/entity
EntityTrackerEntry,net/minecraft/entity
@@ -677,6 +732,8 @@ INpc,net/minecraft/entity
IProjectile,net/minecraft/entity
IRangedAttackMob,net/minecraft/entity
NpcMerchant,net/minecraft/entity
SharedMonsterAttributes,net/minecraft/entity
SpiderEffectsGroupData,net/minecraft/entity
WatchableObject,net/minecraft/entity
EntityAIArrowAttack,net/minecraft/entity/ai
EntityAIAttackOnCollide,net/minecraft/entity/ai
@@ -705,6 +762,7 @@ EntityAIMoveThroughVillage,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
EntityAIOcelotAttack,net/minecraft/entity/ai
EntityAIOcelotSit,net/minecraft/entity/ai
@@ -715,6 +773,7 @@ EntityAIPanic,net/minecraft/entity/ai
EntityAIPlay,net/minecraft/entity/ai
EntityAIRestrictOpenDoor,net/minecraft/entity/ai
EntityAIRestrictSun,net/minecraft/entity/ai
EntityAIRunAroundLikeCrazy,net/minecraft/entity/ai
EntityAISit,net/minecraft/entity/ai
EntityAISwimming,net/minecraft/entity/ai
EntityAITarget,net/minecraft/entity/ai
@@ -734,6 +793,16 @@ EntityMinecartMobSpawnerLogic,net/minecraft/entity/ai
EntityMoveHelper,net/minecraft/entity/ai
EntitySenses,net/minecraft/entity/ai
RandomPositionGenerator,net/minecraft/entity/ai
Attribute,net/minecraft/entity/ai/attributes
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
EntityDragonPart,net/minecraft/entity/boss
@@ -788,6 +857,9 @@ EntityAnimal,net/minecraft/entity/passive
EntityBat,net/minecraft/entity/passive
EntityChicken,net/minecraft/entity/passive
EntityCow,net/minecraft/entity/passive
EntityHorse,net/minecraft/entity/passive
EntityHorseBredSelector,net/minecraft/entity/passive
EntityHorseGroupData,net/minecraft/entity/passive
EntityMooshroom,net/minecraft/entity/passive
EntityOcelot,net/minecraft/entity/passive
EntityPig,net/minecraft/entity/passive
@@ -825,6 +897,8 @@ ContainerHopper,net/minecraft/inventory
ContainerMerchant,net/minecraft/inventory
ContainerPlayer,net/minecraft/inventory
ContainerRepair,net/minecraft/inventory
ContainerRepairINNER1,net/minecraft/inventory
ContainerRepairINNER2,net/minecraft/inventory
ContainerWorkbench,net/minecraft/inventory
ICrafting,net/minecraft/inventory
IInvBasic,net/minecraft/inventory
@@ -836,7 +910,6 @@ InventoryCrafting,net/minecraft/inventory
InventoryEnderChest,net/minecraft/inventory
InventoryLargeChest,net/minecraft/inventory
InventoryMerchant,net/minecraft/inventory
InventoryRepair,net/minecraft/inventory
Slot,net/minecraft/inventory
SlotArmor,net/minecraft/inventory
SlotBeacon,net/minecraft/inventory
@@ -847,7 +920,10 @@ SlotEnchantment,net/minecraft/inventory
SlotEnchantmentTable,net/minecraft/inventory
SlotFurnace,net/minecraft/inventory
SlotMerchantResult,net/minecraft/inventory
SlotRepair,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
@@ -890,6 +966,7 @@ ItemGlassBottle,net/minecraft/item
ItemHangingEntity,net/minecraft/item
ItemHoe,net/minecraft/item
ItemInWorldManager,net/minecraft/item
ItemLeash,net/minecraft/item
ItemLeaves,net/minecraft/item
ItemLilyPad,net/minecraft/item
ItemMap,net/minecraft/item
@@ -897,6 +974,7 @@ ItemMapBase,net/minecraft/item
ItemMinecart,net/minecraft/item
ItemMonsterPlacer,net/minecraft/item
ItemMultiTextureTile,net/minecraft/item
ItemNameTag,net/minecraft/item
ItemPickaxe,net/minecraft/item
ItemPiston,net/minecraft/item
ItemPotion,net/minecraft/item
@@ -938,7 +1016,7 @@ ShapedRecipes,net/minecraft/item/crafting
ShapelessRecipes,net/minecraft/item/crafting
ILogAgent,net/minecraft/logging
LogAgent,net/minecraft/logging
LogAgentINNER1,net/minecraft/logging
LogAgentEmptyAnon,net/minecraft/logging
LogFormatter,net/minecraft/logging
CallableTagCompound1,net/minecraft/nbt
CallableTagCompound2,net/minecraft/nbt
@@ -956,6 +1034,7 @@ NBTTagList,net/minecraft/nbt
NBTTagLong,net/minecraft/nbt
NBTTagShort,net/minecraft/nbt
NBTTagString,net/minecraft/nbt
CallableConnectionName,net/minecraft/network
CallablePacketClass,net/minecraft/network
CallablePacketID,net/minecraft/network
INetworkManager,net/minecraft/network
@@ -1016,6 +1095,7 @@ Packet254ServerPing,net/minecraft/network/packet
Packet255KickDisconnect,net/minecraft/network/packet
Packet25EntityPainting,net/minecraft/network/packet
Packet26EntityExpOrb,net/minecraft/network/packet
Packet27PlayerInput,net/minecraft/network/packet
Packet28EntityVelocity,net/minecraft/network/packet
Packet29DestroyEntity,net/minecraft/network/packet
Packet2ClientProtocol,net/minecraft/network/packet
@@ -1032,6 +1112,7 @@ Packet40EntityMetadata,net/minecraft/network/packet
Packet41EntityEffect,net/minecraft/network/packet
Packet42RemoveEntityEffect,net/minecraft/network/packet
Packet43Experience,net/minecraft/network/packet
Packet44UpdateAttributes,net/minecraft/network/packet
Packet4UpdateTime,net/minecraft/network/packet
Packet51MapChunk,net/minecraft/network/packet
Packet51MapChunkData,net/minecraft/network/packet
@@ -1067,8 +1148,11 @@ PathFinder,net/minecraft/pathfinding
PathNavigate,net/minecraft/pathfinding
PathPoint,net/minecraft/pathfinding
Potion,net/minecraft/potion
PotionAbsoption,net/minecraft/potion
PotionAttackDamage,net/minecraft/potion
PotionEffect,net/minecraft/potion
PotionHealth,net/minecraft/potion
PotionHealthBoost,net/minecraft/potion
PotionHelper,net/minecraft/potion
IPlayerUsage,net/minecraft/profiler
PlayerUsageSnooper,net/minecraft/profiler
@@ -1102,16 +1186,16 @@ DedicatedServerCommandThread,net/minecraft/server/dedicated
DedicatedServerListenThread,net/minecraft/server/dedicated
DedicatedServerSleepThread,net/minecraft/server/dedicated
PropertyManager,net/minecraft/server/dedicated
GuiLogFormatter,net/minecraft/server/gui
GuiLogOutputHandler,net/minecraft/server/gui
GuiStatsComponent,net/minecraft/server/gui
GuiStatsListener,net/minecraft/server/gui
IUpdatePlayerListBox,net/minecraft/server/gui
PlayerListBox,net/minecraft/server/gui
ServerGUI,net/minecraft/server/gui
ServerGuiCommandListener,net/minecraft/server/gui
ServerGuiFocusAdapter,net/minecraft/server/gui
ServerWindowAdapter,net/minecraft/server/gui
MinecraftServerGui,net/minecraft/server/gui
MinecraftServerGuiINNER1,net/minecraft/server/gui
MinecraftServerGuiINNER2,net/minecraft/server/gui
MinecraftServerGuiINNER3,net/minecraft/server/gui
PlayerListComponent,net/minecraft/server/gui
StatsComponent,net/minecraft/server/gui
StatsComponentINNER1,net/minecraft/server/gui
TextAreaLogHandler,net/minecraft/server/gui
TextAreaLogHandlerINNER1,net/minecraft/server/gui
CallableIsModded,net/minecraft/server/integrated
CallableType3,net/minecraft/server/integrated
IntegratedPlayerList,net/minecraft/server/integrated
@@ -1135,6 +1219,7 @@ StatCrafting,net/minecraft/stats
StatFileWriter,net/minecraft/stats
StatList,net/minecraft/stats
StatTypeDistance,net/minecraft/stats
StatTypeFloat,net/minecraft/stats
StatTypeSimple,net/minecraft/stats
StatTypeTime,net/minecraft/stats
StatsSyncher,net/minecraft/stats
@@ -1171,6 +1256,7 @@ AABBLocalPool,net/minecraft/util
AABBPool,net/minecraft/util
AxisAlignedBB,net/minecraft/util
ChatAllowedCharacters,net/minecraft/util
ChatMessageComponent,net/minecraft/util
ChunkCoordinates,net/minecraft/util
CombatEntry,net/minecraft/util
CombatTracker,net/minecraft/util
@@ -1188,8 +1274,6 @@ EnumOS,net/minecraft/util
Facing,net/minecraft/util
FoodStats,net/minecraft/util
HttpUtil,net/minecraft/util
HttpUtilRunnable,net/minecraft/util
IDownloadSuccess,net/minecraft/util
IProgressUpdate,net/minecraft/util
Icon,net/minecraft/util
IntHashMap,net/minecraft/util
@@ -1198,6 +1282,7 @@ LongHashMap,net/minecraft/util
LongHashMapEntry,net/minecraft/util
MD5String,net/minecraft/util
MathHelper,net/minecraft/util
MessageComponentSerializer,net/minecraft/util
MinecraftError,net/minecraft/util
MouseFilter,net/minecraft/util
MouseHelper,net/minecraft/util
@@ -1210,9 +1295,9 @@ Session,net/minecraft/util
StatCollector,net/minecraft/util
StringTranslate,net/minecraft/util
StringUtils,net/minecraft/util
ThreadDownloadResources,net/minecraft/util
Timer,net/minecraft/util
Tuple,net/minecraft/util
Util,net/minecraft/util
ValueObject,net/minecraft/util
Vec3,net/minecraft/util
Vec3Pool,net/minecraft/util
1 class package
13 BlockButtonWood net/minecraft/block
14 BlockCactus net/minecraft/block
15 BlockCake net/minecraft/block
16 BlockCarpet net/minecraft/block
17 BlockCarrot net/minecraft/block
18 BlockCauldron net/minecraft/block
19 BlockChest net/minecraft/block
20 BlockClay net/minecraft/block
BlockCloth net/minecraft/block
21 BlockCocoa net/minecraft/block
22 BlockColored net/minecraft/block
23 BlockCommandBlock net/minecraft/block
24 BlockComparator net/minecraft/block
25 BlockContainer net/minecraft/block
52 BlockGrass net/minecraft/block
53 BlockGravel net/minecraft/block
54 BlockHalfSlab net/minecraft/block
55 BlockHay net/minecraft/block
56 BlockHopper net/minecraft/block
57 BlockIce net/minecraft/block
58 BlockJukeBox net/minecraft/block
95 BlockRedstoneTorch net/minecraft/block
96 BlockRedstoneWire net/minecraft/block
97 BlockReed net/minecraft/block
98 BlockRotatedPillar net/minecraft/block
99 BlockSand net/minecraft/block
100 BlockSandStone net/minecraft/block
101 BlockSapling net/minecraft/block
144 CallableClientProfiler net/minecraft/client
145 CallableGLInfo net/minecraft/client
146 CallableLWJGLVersion net/minecraft/client
147 CallableLaunchedVersion net/minecraft/client
148 CallableModded net/minecraft/client
149 CallableParticleScreenName net/minecraft/client
150 CallableTexturePack net/minecraft/client
CallableTickingScreenName net/minecraft/client
151 CallableType2 net/minecraft/client
152 CallableUpdatingScreenName net/minecraft/client
153 CanvasCrashReport Minecraft net/minecraft/client
CanvasMinecraftApplet net/minecraft/client
CanvasMojangLogo net/minecraft/client
EnumOSHelper net/minecraft/client
GameWindowListener net/minecraft/client
MinecraftAppletImpl net/minecraft/client
MinecraftFakeLauncher net/minecraft/client
PanelCrashReport net/minecraft/client
154 StatStringFormatKeyInv net/minecraft/client
155 ThreadClientSleep net/minecraft/client
ThreadShutdown net/minecraft/client
CodecMus net/minecraft/client/audio
MusInputStream net/minecraft/client/audio
156 ScheduledSound net/minecraft/client/audio
157 SoundManager net/minecraft/client/audio
158 SoundManagerINNER1 net/minecraft/client/audio
159 SoundPool net/minecraft/client/audio
160 SoundPoolEntry net/minecraft/client/audio
161 SoundPoolProtocolHandler net/minecraft/client/audio
162 SoundPoolURLConnection net/minecraft/client/audio
163 AbstractClientPlayer net/minecraft/client/entity
164 EntityClientPlayerMP net/minecraft/client/entity
165 EntityOtherPlayerMP net/minecraft/client/entity
166 EntityPlayerSP net/minecraft/client/entity
199 GuiMultiplayer net/minecraft/client/gui
200 GuiNewChat net/minecraft/client/gui
201 GuiOptions net/minecraft/client/gui
GuiParticle net/minecraft/client/gui
202 GuiPlayerInfo net/minecraft/client/gui
GuiProgress net/minecraft/client/gui
203 GuiRenameWorld net/minecraft/client/gui
204 GuiRepair net/minecraft/client/gui
205 GuiScreen net/minecraft/client/gui
207 GuiScreenBook net/minecraft/client/gui
208 GuiScreenConfigureWorld net/minecraft/client/gui
209 GuiScreenConfirmation net/minecraft/client/gui
GuiScreenCreateOnlineWorld net/minecraft/client/gui
210 GuiScreenDemo net/minecraft/client/gui
211 GuiScreenDisconnectedOnline net/minecraft/client/gui
212 GuiScreenEditOnlineWorld net/minecraft/client/gui
213 GuiScreenInvite net/minecraft/client/gui
214 GuiScreenLongRunningTask net/minecraft/client/gui
215 GuiScreenOnlineServers net/minecraft/client/gui
216 GuiScreenResetWorld GuiScreenOnlineServersSubscreen net/minecraft/client/gui
217 GuiScreenSelectLocation net/minecraft/client/gui
218 GuiScreenServerList net/minecraft/client/gui
219 GuiScreenSubscription net/minecraft/client/gui
235 GuiYesNo net/minecraft/client/gui
236 LoadingScreenRenderer net/minecraft/client/gui
237 MapItemRenderer net/minecraft/client/gui
238 Particle RunnableTitleScreen net/minecraft/client/gui
239 ScaledResolution net/minecraft/client/gui
240 ScreenChatOptions net/minecraft/client/gui
241 SelectionListBase net/minecraft/client/gui
242 SelectionListInvited net/minecraft/client/gui
SelectionListLocation net/minecraft/client/gui
243 TaskLongRunning net/minecraft/client/gui
244 TaskOnlineConnect net/minecraft/client/gui
TaskResetWorld net/minecraft/client/gui
TaskWorldCreation net/minecraft/client/gui
245 ThreadConnectToOnlineServer net/minecraft/client/gui
ThreadCreateOnlineWorldScreen net/minecraft/client/gui
246 ThreadOnlineConnect net/minecraft/client/gui
247 ThreadOnlineScreen net/minecraft/client/gui
248 ThreadPollServers net/minecraft/client/gui
ThreadTitleScreen net/minecraft/client/gui
249 GuiAchievement net/minecraft/client/gui/achievement
250 GuiAchievements net/minecraft/client/gui/achievement
251 GuiSlotStats net/minecraft/client/gui/achievement
271 GuiEditSign net/minecraft/client/gui/inventory
272 GuiFurnace net/minecraft/client/gui/inventory
273 GuiInventory net/minecraft/client/gui/inventory
274 GuiScreenHorseInventory net/minecraft/client/gui/inventory
275 SlotCreativeInventory net/minecraft/client/gui/inventory
276 GuiScreenBackup net/minecraft/client/gui/mco
277 GuiScreenBackupDownloadThread net/minecraft/client/gui/mco
278 GuiScreenBackupRestoreTask net/minecraft/client/gui/mco
279 GuiScreenBackupSelectionList net/minecraft/client/gui/mco
280 GuiScreenCreateOnlineWorld net/minecraft/client/gui/mco
281 GuiScreenMcoWorldTemplate net/minecraft/client/gui/mco
282 GuiScreenMcoWorldTemplateDownloadThread net/minecraft/client/gui/mco
283 GuiScreenMcoWorldTemplateSelectionList net/minecraft/client/gui/mco
284 GuiScreenPendingInvitation net/minecraft/client/gui/mco
285 GuiScreenPendingInvitationINNER1 net/minecraft/client/gui/mco
286 GuiScreenPendingInvitationINNER2 net/minecraft/client/gui/mco
287 GuiScreenPendingInvitationINNER3 net/minecraft/client/gui/mco
288 GuiScreenPendingInvitationList net/minecraft/client/gui/mco
289 GuiScreenResetWorld net/minecraft/client/gui/mco
290 ScreenWithCallback net/minecraft/client/gui/mco
291 TaskResetWorld net/minecraft/client/gui/mco
292 TaskWorldCreation net/minecraft/client/gui/mco
293 MainProxyAuthenticator net/minecraft/client/main
294 MainShutdownHook net/minecraft/client/main
295 Backup net/minecraft/client/mco
296 BackupList net/minecraft/client/mco
297 ExceptionMcoHttp net/minecraft/client/mco
298 ExceptionMcoService net/minecraft/client/mco
299 ExceptionRetryCall net/minecraft/client/mco
Location net/minecraft/client/mco
Locations net/minecraft/client/mco
300 McoClient net/minecraft/client/mco
McoOption net/minecraft/client/mco
McoOptionNone net/minecraft/client/mco
McoOptionSome net/minecraft/client/mco
McoPair net/minecraft/client/mco
301 McoServer net/minecraft/client/mco
302 McoServerAddress net/minecraft/client/mco
303 McoServerList net/minecraft/client/mco
304 McoServerListINNER1 McoServerListEmptyAnon net/minecraft/client/mco
305 McoServerListUpdateThread net/minecraft/client/mco
306 McoServerListUpdateThreadComparer net/minecraft/client/mco
307 PendingInvite net/minecraft/client/mco
308 PendingInvitesList net/minecraft/client/mco
309 Request net/minecraft/client/mco
310 RequestDelete net/minecraft/client/mco
311 RequestGet net/minecraft/client/mco
312 RequestPost net/minecraft/client/mco
313 RequestPut net/minecraft/client/mco
TimerTaskMcoServerListUpdate net/minecraft/client/mco
TimerTaskMcoServerListUpdateComparator net/minecraft/client/mco
314 ValueObjectList net/minecraft/client/mco
315 ValueObjectSubscription net/minecraft/client/mco
316 WorldTemplate net/minecraft/client/mco
317 WorldTemplateList net/minecraft/client/mco
318 ModelBase net/minecraft/client/model
319 ModelBat net/minecraft/client/model
320 ModelBiped net/minecraft/client/model
330 ModelEnderCrystal net/minecraft/client/model
331 ModelEnderman net/minecraft/client/model
332 ModelGhast net/minecraft/client/model
333 ModelHorse net/minecraft/client/model
334 ModelIronGolem net/minecraft/client/model
335 ModelLargeChest net/minecraft/client/model
336 ModelLeashKnot net/minecraft/client/model
337 ModelMagmaCube net/minecraft/client/model
338 ModelMinecart net/minecraft/client/model
339 ModelOcelot net/minecraft/client/model
366 LanServer net/minecraft/client/multiplayer
367 LanServerList net/minecraft/client/multiplayer
368 NetClientHandler net/minecraft/client/multiplayer
NetClientWebTextures net/minecraft/client/multiplayer
369 PlayerControllerMP net/minecraft/client/multiplayer
370 ServerAddress net/minecraft/client/multiplayer
371 ServerData net/minecraft/client/multiplayer
405 EntitySpellParticleFX net/minecraft/client/particle
406 EntitySplashFX net/minecraft/client/particle
407 EntitySuspendFX net/minecraft/client/particle
408 RenderCaveSpider net/minecraft/client/render/entity
409 RenderHorse net/minecraft/client/render/entity
410 RenderLeashKnot net/minecraft/client/render/entity
411 RendererLivingEntity net/minecraft/client/render/entity
412 ActiveRenderInfo net/minecraft/client/renderer
413 CallableMouseLocation net/minecraft/client/renderer
414 CallableParticlePositionInfo net/minecraft/client/renderer
CallableParticleScreenName net/minecraft/client/renderer
415 CallableScreenName net/minecraft/client/renderer
416 CallableScreenSize net/minecraft/client/renderer
417 ChestItemRenderHelper net/minecraft/client/renderer
427 OpenGlCapsChecker net/minecraft/client/renderer
428 OpenGlHelper net/minecraft/client/renderer
429 RenderBlocks net/minecraft/client/renderer
RenderEngine net/minecraft/client/renderer
430 RenderGlobal net/minecraft/client/renderer
431 RenderHelper net/minecraft/client/renderer
432 RenderList net/minecraft/client/renderer
433 RenderSorter net/minecraft/client/renderer
434 StitcherException net/minecraft/client/renderer
435 Tessellator net/minecraft/client/renderer
ThreadDownloadImage net/minecraft/client/renderer
436 ThreadDownloadImageData net/minecraft/client/renderer
437 ThreadDownloadImageDataINNER1 net/minecraft/client/renderer
438 WorldRenderer net/minecraft/client/renderer
439 ClippingHelper net/minecraft/client/renderer/culling
440 ClippingHelperImpl net/minecraft/client/renderer/culling
486 RenderWolf net/minecraft/client/renderer/entity
487 RenderXPOrb net/minecraft/client/renderer/entity
488 RenderZombie net/minecraft/client/renderer/entity
489 AbstractTexture net/minecraft/client/renderer/texture
490 DynamicTexture net/minecraft/client/renderer/texture
491 IconRegister net/minecraft/client/renderer/texture
492 Rect2i LayeredTexture net/minecraft/client/renderer/texture
493 SimpleTexture net/minecraft/client/renderer/texture
494 StitchHolder net/minecraft/client/renderer/texture
495 StitchSlot net/minecraft/client/renderer/texture
496 Stitcher net/minecraft/client/renderer/texture
497 Texture TextureAtlasSprite net/minecraft/client/renderer/texture
498 TextureClock net/minecraft/client/renderer/texture
499 TextureCompass net/minecraft/client/renderer/texture
500 TextureManager net/minecraft/client/renderer/texture
501 TextureManagerINNER1 net/minecraft/client/renderer/texture
502 TextureMap net/minecraft/client/renderer/texture
503 TextureStitched TextureObject net/minecraft/client/renderer/texture
504 TextureUtil net/minecraft/client/renderer/texture
505 Tickable net/minecraft/client/renderer/texture
506 TickableTextureObject net/minecraft/client/renderer/texture
507 RenderEndPortal net/minecraft/client/renderer/tileentity
508 RenderEnderCrystal net/minecraft/client/renderer/tileentity
509 RenderItemFrame net/minecraft/client/renderer/tileentity
517 TileEntitySignRenderer net/minecraft/client/renderer/tileentity
518 TileEntitySkullRenderer net/minecraft/client/renderer/tileentity
519 TileEntitySpecialRenderer net/minecraft/client/renderer/tileentity
520 AbstractResourcePack net/minecraft/client/resources
521 DefaultResourcePack net/minecraft/client/resources
522 FallbackResourceManager net/minecraft/client/resources
523 FileResourcePack net/minecraft/client/resources
524 FolderResourcePack net/minecraft/client/resources
525 FolderResourcePackFilter net/minecraft/client/resources
526 FoliageColorReloadListener net/minecraft/client/resources
527 GrassColorReloadListener net/minecraft/client/resources
528 GuiScreenTemporaryResourcePackSelect net/minecraft/client/resources
529 GuiScreenTemporaryResourcePackSelectSelectionList net/minecraft/client/resources
530 I18n net/minecraft/client/resources
531 Language net/minecraft/client/resources
532 LanguageManager net/minecraft/client/resources
533 Locale net/minecraft/client/resources
534 ReloadableResourceManager net/minecraft/client/resources
535 Resource net/minecraft/client/resources
536 ResourceLocation net/minecraft/client/resources
537 ResourceManager net/minecraft/client/resources
538 ResourceManagerReloadListener net/minecraft/client/resources
539 ResourcePack net/minecraft/client/resources
540 ResourcePackFileNotFoundException net/minecraft/client/resources
541 ResourcePackRepository net/minecraft/client/resources
542 ResourcePackRepositoryEntry net/minecraft/client/resources
543 ResourcePackRepositoryFilter net/minecraft/client/resources
544 SimpleReloadableResourceManager net/minecraft/client/resources
545 SimpleReloadableResourceManagerINNER1 net/minecraft/client/resources
546 SimpleResource net/minecraft/client/resources
547 AnimationFrame net/minecraft/client/resources/data
548 AnimationMetadataSection net/minecraft/client/resources/data
549 AnimationMetadataSectionSerializer net/minecraft/client/resources/data
550 BaseMetadataSectionSerializer net/minecraft/client/resources/data
551 FontMetadataSection net/minecraft/client/resources/data
552 FontMetadataSectionSerializer net/minecraft/client/resources/data
553 LanguageMetadataSection net/minecraft/client/resources/data
554 LanguageMetadataSectionSerializer net/minecraft/client/resources/data
555 MetadataSection net/minecraft/client/resources/data
556 MetadataSectionSerializer net/minecraft/client/resources/data
557 MetadataSerializer net/minecraft/client/resources/data
558 MetadataSerializerEmptyAnon net/minecraft/client/resources/data
559 MetadataSerializerRegistration net/minecraft/client/resources/data
560 PackMetadataSection net/minecraft/client/resources/data
561 PackMetadataSectionSerializer net/minecraft/client/resources/data
562 TextureMetadataSection net/minecraft/client/resources/data
563 TextureMetadataSectionSerializer net/minecraft/client/resources/data
564 EnumOptions net/minecraft/client/settings
565 EnumOptionsHelper net/minecraft/client/settings
566 GameSettings net/minecraft/client/settings
567 KeyBinding net/minecraft/client/settings
568 StatPlaceholder net/minecraft/client/stats
GuiTexturePackSlot net/minecraft/client/texturepacks
GuiTexturePacks net/minecraft/client/texturepacks
ITexturePack net/minecraft/client/texturepacks
TexturePackCustom net/minecraft/client/texturepacks
TexturePackDefault net/minecraft/client/texturepacks
TexturePackDownloadSuccess net/minecraft/client/texturepacks
TexturePackFolder net/minecraft/client/texturepacks
TexturePackImplementation net/minecraft/client/texturepacks
TexturePackList net/minecraft/client/texturepacks
569 CommandBase net/minecraft/command
570 CommandClearInventory net/minecraft/command
571 CommandDebug net/minecraft/command
602 CommandServerWhitelist net/minecraft/command
603 CommandSetSpawnpoint net/minecraft/command
604 CommandShowSeed net/minecraft/command
605 CommandSpreadPlayers net/minecraft/command
606 CommandSpreadPlayersPosition net/minecraft/command
607 CommandTime net/minecraft/command
608 CommandToggleDownfall net/minecraft/command
609 CommandWeather net/minecraft/command
702 EnchantmentWaterWorker net/minecraft/enchantment
703 EnumEnchantmentType net/minecraft/enchantment
704 IEnchantmentModifier net/minecraft/enchantment
CallableEffectAmplifier net/minecraft/entity
CallableEffectDuration net/minecraft/entity
CallableEffectID net/minecraft/entity
CallableEffectIsAmbient net/minecraft/entity
CallableEffectIsSplash net/minecraft/entity
CallableEffectName net/minecraft/entity
705 CallableEntityName net/minecraft/entity
706 CallableEntityTracker net/minecraft/entity
707 CallableEntityType net/minecraft/entity
713 EntityEggInfo net/minecraft/entity
714 EntityFlying net/minecraft/entity
715 EntityHanging net/minecraft/entity
716 EntityLeashKnot net/minecraft/entity
717 EntityList net/minecraft/entity
718 EntityLiving net/minecraft/entity
719 EntityLivingBase net/minecraft/entity
720 EntityLivingData net/minecraft/entity
721 EntityOwnable net/minecraft/entity
722 EntitySelectorArmoredMob net/minecraft/entity
723 EntityTracker net/minecraft/entity
724 EntityTrackerEntry net/minecraft/entity
732 IProjectile net/minecraft/entity
733 IRangedAttackMob net/minecraft/entity
734 NpcMerchant net/minecraft/entity
735 SharedMonsterAttributes net/minecraft/entity
736 SpiderEffectsGroupData net/minecraft/entity
737 WatchableObject net/minecraft/entity
738 EntityAIArrowAttack net/minecraft/entity/ai
739 EntityAIAttackOnCollide net/minecraft/entity/ai
762 EntityAIMoveTowardsTarget net/minecraft/entity/ai
763 EntityAIMoveTwardsRestriction net/minecraft/entity/ai
764 EntityAINearestAttackableTarget net/minecraft/entity/ai
765 EntityAINearestAttackableTargetSelector net/minecraft/entity/ai
766 EntityAINearestAttackableTargetSorter net/minecraft/entity/ai
767 EntityAIOcelotAttack net/minecraft/entity/ai
768 EntityAIOcelotSit net/minecraft/entity/ai
773 EntityAIPlay net/minecraft/entity/ai
774 EntityAIRestrictOpenDoor net/minecraft/entity/ai
775 EntityAIRestrictSun net/minecraft/entity/ai
776 EntityAIRunAroundLikeCrazy net/minecraft/entity/ai
777 EntityAISit net/minecraft/entity/ai
778 EntityAISwimming net/minecraft/entity/ai
779 EntityAITarget net/minecraft/entity/ai
793 EntityMoveHelper net/minecraft/entity/ai
794 EntitySenses net/minecraft/entity/ai
795 RandomPositionGenerator net/minecraft/entity/ai
796 Attribute net/minecraft/entity/ai/attributes
797 AttributeInstance net/minecraft/entity/ai/attributes
798 AttributeModifier net/minecraft/entity/ai/attributes
799 BaseAttribute net/minecraft/entity/ai/attributes
800 BaseAttributeMap net/minecraft/entity/ai/attributes
801 ClientsideAttributeMap net/minecraft/entity/ai/attributes
802 ModifiableAttributeInstance net/minecraft/entity/ai/attributes
803 RangedAttribute net/minecraft/entity/ai/attributes
804 ReadonlyAttributeInstance net/minecraft/entity/ai/attributes
805 ServersideAttributeMap net/minecraft/entity/ai/attributes
806 BossStatus net/minecraft/entity/boss
807 EntityDragon net/minecraft/entity/boss
808 EntityDragonPart net/minecraft/entity/boss
857 EntityBat net/minecraft/entity/passive
858 EntityChicken net/minecraft/entity/passive
859 EntityCow net/minecraft/entity/passive
860 EntityHorse net/minecraft/entity/passive
861 EntityHorseBredSelector net/minecraft/entity/passive
862 EntityHorseGroupData net/minecraft/entity/passive
863 EntityMooshroom net/minecraft/entity/passive
864 EntityOcelot net/minecraft/entity/passive
865 EntityPig net/minecraft/entity/passive
897 ContainerMerchant net/minecraft/inventory
898 ContainerPlayer net/minecraft/inventory
899 ContainerRepair net/minecraft/inventory
900 ContainerRepairINNER1 net/minecraft/inventory
901 ContainerRepairINNER2 net/minecraft/inventory
902 ContainerWorkbench net/minecraft/inventory
903 ICrafting net/minecraft/inventory
904 IInvBasic net/minecraft/inventory
910 InventoryEnderChest net/minecraft/inventory
911 InventoryLargeChest net/minecraft/inventory
912 InventoryMerchant net/minecraft/inventory
InventoryRepair net/minecraft/inventory
913 Slot net/minecraft/inventory
914 SlotArmor net/minecraft/inventory
915 SlotBeacon net/minecraft/inventory
920 SlotEnchantmentTable net/minecraft/inventory
921 SlotFurnace net/minecraft/inventory
922 SlotMerchantResult net/minecraft/inventory
923 SlotRepair AnimalChest net/minecraft/inventory net/minecraft/inventroy
924 ContainerHorseInventory net/minecraft/inventroy
925 ContainerHorseInventorySlotArmor net/minecraft/inventroy
926 ContainerHorseInventorySlotSaddle net/minecraft/inventroy
927 BehaviorDispenseArmor net/minecraft/item
928 BehaviorDispenseMinecart net/minecraft/item
929 EnumAction net/minecraft/item
966 ItemHangingEntity net/minecraft/item
967 ItemHoe net/minecraft/item
968 ItemInWorldManager net/minecraft/item
969 ItemLeash net/minecraft/item
970 ItemLeaves net/minecraft/item
971 ItemLilyPad net/minecraft/item
972 ItemMap net/minecraft/item
974 ItemMinecart net/minecraft/item
975 ItemMonsterPlacer net/minecraft/item
976 ItemMultiTextureTile net/minecraft/item
977 ItemNameTag net/minecraft/item
978 ItemPickaxe net/minecraft/item
979 ItemPiston net/minecraft/item
980 ItemPotion net/minecraft/item
1016 ShapelessRecipes net/minecraft/item/crafting
1017 ILogAgent net/minecraft/logging
1018 LogAgent net/minecraft/logging
1019 LogAgentINNER1 LogAgentEmptyAnon net/minecraft/logging
1020 LogFormatter net/minecraft/logging
1021 CallableTagCompound1 net/minecraft/nbt
1022 CallableTagCompound2 net/minecraft/nbt
1034 NBTTagLong net/minecraft/nbt
1035 NBTTagShort net/minecraft/nbt
1036 NBTTagString net/minecraft/nbt
1037 CallableConnectionName net/minecraft/network
1038 CallablePacketClass net/minecraft/network
1039 CallablePacketID net/minecraft/network
1040 INetworkManager net/minecraft/network
1095 Packet255KickDisconnect net/minecraft/network/packet
1096 Packet25EntityPainting net/minecraft/network/packet
1097 Packet26EntityExpOrb net/minecraft/network/packet
1098 Packet27PlayerInput net/minecraft/network/packet
1099 Packet28EntityVelocity net/minecraft/network/packet
1100 Packet29DestroyEntity net/minecraft/network/packet
1101 Packet2ClientProtocol net/minecraft/network/packet
1112 Packet41EntityEffect net/minecraft/network/packet
1113 Packet42RemoveEntityEffect net/minecraft/network/packet
1114 Packet43Experience net/minecraft/network/packet
1115 Packet44UpdateAttributes net/minecraft/network/packet
1116 Packet4UpdateTime net/minecraft/network/packet
1117 Packet51MapChunk net/minecraft/network/packet
1118 Packet51MapChunkData net/minecraft/network/packet
1148 PathNavigate net/minecraft/pathfinding
1149 PathPoint net/minecraft/pathfinding
1150 Potion net/minecraft/potion
1151 PotionAbsoption net/minecraft/potion
1152 PotionAttackDamage net/minecraft/potion
1153 PotionEffect net/minecraft/potion
1154 PotionHealth net/minecraft/potion
1155 PotionHealthBoost net/minecraft/potion
1156 PotionHelper net/minecraft/potion
1157 IPlayerUsage net/minecraft/profiler
1158 PlayerUsageSnooper net/minecraft/profiler
1186 DedicatedServerListenThread net/minecraft/server/dedicated
1187 DedicatedServerSleepThread net/minecraft/server/dedicated
1188 PropertyManager net/minecraft/server/dedicated
GuiLogFormatter net/minecraft/server/gui
GuiLogOutputHandler net/minecraft/server/gui
GuiStatsComponent net/minecraft/server/gui
GuiStatsListener net/minecraft/server/gui
1189 IUpdatePlayerListBox net/minecraft/server/gui
1190 PlayerListBox MinecraftServerGui net/minecraft/server/gui
1191 ServerGUI MinecraftServerGuiINNER1 net/minecraft/server/gui
1192 ServerGuiCommandListener MinecraftServerGuiINNER2 net/minecraft/server/gui
1193 ServerGuiFocusAdapter MinecraftServerGuiINNER3 net/minecraft/server/gui
1194 ServerWindowAdapter PlayerListComponent net/minecraft/server/gui
1195 StatsComponent net/minecraft/server/gui
1196 StatsComponentINNER1 net/minecraft/server/gui
1197 TextAreaLogHandler net/minecraft/server/gui
1198 TextAreaLogHandlerINNER1 net/minecraft/server/gui
1199 CallableIsModded net/minecraft/server/integrated
1200 CallableType3 net/minecraft/server/integrated
1201 IntegratedPlayerList net/minecraft/server/integrated
1219 StatFileWriter net/minecraft/stats
1220 StatList net/minecraft/stats
1221 StatTypeDistance net/minecraft/stats
1222 StatTypeFloat net/minecraft/stats
1223 StatTypeSimple net/minecraft/stats
1224 StatTypeTime net/minecraft/stats
1225 StatsSyncher net/minecraft/stats
1256 AABBPool net/minecraft/util
1257 AxisAlignedBB net/minecraft/util
1258 ChatAllowedCharacters net/minecraft/util
1259 ChatMessageComponent net/minecraft/util
1260 ChunkCoordinates net/minecraft/util
1261 CombatEntry net/minecraft/util
1262 CombatTracker net/minecraft/util
1274 Facing net/minecraft/util
1275 FoodStats net/minecraft/util
1276 HttpUtil net/minecraft/util
HttpUtilRunnable net/minecraft/util
IDownloadSuccess net/minecraft/util
1277 IProgressUpdate net/minecraft/util
1278 Icon net/minecraft/util
1279 IntHashMap net/minecraft/util
1282 LongHashMapEntry net/minecraft/util
1283 MD5String net/minecraft/util
1284 MathHelper net/minecraft/util
1285 MessageComponentSerializer net/minecraft/util
1286 MinecraftError net/minecraft/util
1287 MouseFilter net/minecraft/util
1288 MouseHelper net/minecraft/util
1295 StatCollector net/minecraft/util
1296 StringTranslate net/minecraft/util
1297 StringUtils net/minecraft/util
ThreadDownloadResources net/minecraft/util
1298 Timer net/minecraft/util
1299 Tuple net/minecraft/util
1300 Util net/minecraft/util
1301 ValueObject net/minecraft/util
1302 Vec3 net/minecraft/util
1303 Vec3Pool net/minecraft/util
+119 -60
View File
@@ -10,15 +10,6 @@ p_101001_1_,par1,2
p_101001_2_,par2,2
p_101001_3_,par3,2
p_101001_4_,par4,2
p_101002_0_,par0GuiScreenOnlineServers,2
p_101002_1_,par1McoServer,2
p_101003_0_,par0GuiScreenOnlineServers,2
p_101003_1_,par1,2
p_101003_2_,par2,2
p_101003_3_,par3,2
p_101003_4_,par4,2
p_101004_0_,par0GuiScreenOnlineServers,2
p_101005_0_,par0GuiScreenOnlineServers,2
p_101006_1_,par1,2
p_101006_2_,par2,2
p_101006_3_,par3,2
@@ -32,8 +23,6 @@ p_101009_1_,par1,2
p_101009_2_,par2,2
p_101009_3_,par3,2
p_101009_4_,par4,2
p_101011_0_,par0GuiScreenOnlineServers,2
p_101011_1_,par1Str,2
p_101012_0_,par0GuiScreenOnlineServers,2
p_101012_1_,par1,2
p_101012_2_,par2,2
@@ -78,6 +67,96 @@ p_102027_4_,par4,2
p_102027_5_,par5,2
p_102027_6_,par6,2
p_102027_7_,par7,2
p_104004_0_,par0GuiMainMenu,2
p_104005_0_,par0GuiMainMenu,2
p_104005_1_,par1Str,2
p_104006_0_,par0GuiMainMenu,2
p_104006_1_,par1,2
p_104007_0_,par0GuiMainMenu,2
p_104008_0_,par0GuiMainMenu,2
p_104008_1_,par1,2
p_104009_0_,par0GuiMainMenu,2
p_104009_1_,par1,2
p_104010_0_,par0,2
p_104011_0_,par0GuiMainMenu,2
p_104011_1_,par1,2
p_104012_0_,par0GuiMainMenu,2
p_104012_1_,par1,2
p_104013_0_,par0GuiMainMenu,2
p_104013_1_,par1Str,2
p_104014_0_,par0GuiMainMenu,2
p_104014_1_,par1,2
p_104015_0_,par0GuiMainMenu,2
p_104016_0_,par0GuiMainMenu,2
p_104017_0_,par0GuiMainMenu,2
p_104018_0_,par0GuiMainMenu,2
p_104019_0_,par0GuiMainMenu,2
p_104020_0_,par0GuiMainMenu,2
p_104021_0_,par0GuiMainMenu,2
p_104021_1_,par1StringTranslate,2
p_104021_2_,par2,2
p_104021_3_,par3,2
p_104022_0_,par0GuiMainMenu,2
p_104023_0_,par0GuiMainMenu,2
p_104026_0_,par0GuiScreenOnlineServers,2
p_104026_1_,par1Str,2
p_104027_0_,par0GuiScreenOnlineServers,2
p_104028_0_,par0GuiScreenOnlineServers,2
p_104029_0_,par0GuiScreenOnlineServers,2
p_104030_0_,par0GuiScreenOnlineServers,2
p_104030_1_,par1,2
p_104030_2_,par2,2
p_104030_3_,par3,2
p_104030_4_,par4,2
p_104030_5_,par5,2
p_104031_0_,par0GuiScreenOnlineServers,2
p_104031_1_,par1,2
p_104031_2_,par2,2
p_104031_3_,par3,2
p_104031_4_,par4,2
p_104032_0_,par0GuiScreenOnlineServers,2
p_104033_0_,par0GuiScreenOnlineServers,2
p_104034_0_,par0GuiScreenOnlineServers,2
p_104034_1_,par1McoServer,2
p_104036_0_,par0GuiScreenOnlineServers,2
p_104038_0_,par0GuiScreenOnlineServers,2
p_104039_1_,par1,2
p_104039_2_,par2,2
p_104039_3_,par3,2
p_104039_4_,par4,2
p_104039_5_,par5,2
p_104040_0_,par0GuiScreenOnlineServers,2
p_104043_0_,par0GuiScreenOnlineServers,2
p_104047_0_,par0GuiScreenCreateOnlineWorld,2
p_104048_0_,par0GuiScreenCreateOnlineWorld,2
p_104055_1_,par1,2
p_104062_1_,par1,2
p_104062_2_,par2,2
p_104062_3_,par3Texture,2
p_104064_0_,par0Str,2
p_104064_1_,par1Str,2
p_104064_2_,par2,2
p_104064_3_,par3,2
p_104069_1_,par1GuiButton,2
p_104071_1_,par1GuiScreen,2
p_104071_2_,par2FontRenderer,2
p_104083_1_,par1,2
p_104083_2_,par2,2
p_104083_3_,par3,2
p_104083_4_,par4,2
p_104084_1_,par1,2
p_104084_2_,par2,2
p_104084_3_,par3,2
p_104084_4_,par4,2
p_104086_1_,par1,2
p_104087_1_,par1,2
p_104087_2_,par2,2
p_104088_1_,par1,2
p_104088_2_,par2,2
p_104088_3_,par3Tessellator,2
p_104089_1_,par1,2
p_104089_2_,par2,2
p_104145_0_,par0URL,2
p_70000_1_,par1PlayerUsageSnooper,2
p_70001_1_,par1PlayerUsageSnooper,2
p_70003_1_,par1,2
@@ -7661,20 +7740,7 @@ p_96174_1_,par1McoServer,2
p_96177_0_,par0GuiScreenOnlineServers,2
p_96209_1_,par1Str,2
p_96210_1_,par1Str,2
p_96230_0_,par0GuiScreenSelectLocation,2
p_96231_0_,par0GuiScreenSelectLocation,2
p_96232_0_,par0GuiScreenSelectLocation,2
p_96233_0_,par0GuiScreenSelectLocation,2
p_96234_0_,par0GuiScreenSelectLocation,2
p_96234_1_,par1Location,2
p_96235_0_,par0GuiScreenSelectLocation,2
p_96236_0_,par0GuiScreenSelectLocation,2
p_96246_0_,par0GuiScreenCreateOnlineWorld,2
p_96247_0_,par0GuiScreenCreateOnlineWorld,2
p_96248_0_,par0GuiScreenCreateOnlineWorld,2
p_96251_1_,par1Location,2
p_96251_2_,par2Str,2
p_96251_3_,par3Str,2
p_96263_0_,par0GuiScreenConfigureWorld,2
p_96264_1_,par1,2
p_96265_0_,par0GuiScreenConfigureWorld,2
@@ -7763,6 +7829,7 @@ p_96363_0_,par0Str,2
p_96363_1_,par1Str,2
p_96374_1_,par1,2
p_96376_1_,par1,2
p_96376_3_,par3Str,2
p_96377_1_,par1Request,2
p_96378_1_,par1,2
p_96380_1_,par1Str,2
@@ -7772,9 +7839,12 @@ p_96383_1_,par1,2
p_96384_1_,par1,2
p_96384_3_,par3Str,2
p_96384_4_,par4Str,2
p_96384_5_,par5,2
p_96384_6_,par6,2
p_96386_1_,par1Str,2
p_96386_2_,par2Str,2
p_96386_3_,par3Str,2
p_96386_4_,par4Str,2
p_96387_1_,par1,2
p_96387_3_,par3Str,2
p_96394_0_,par0Field,2
@@ -7961,43 +8031,25 @@ p_98046_1_,par1,2
p_98053_1_,par1,2
p_98054_1_,par1,2
p_98055_1_,par1,2
p_98058_0_,par0GuiMainMenu,2
p_98059_0_,par0,2
p_98060_1_,par1StringTranslate,2
p_98060_2_,par2,2
p_98060_3_,par3,2
p_98061_0_,par0GuiMainMenu,2
p_98061_1_,par1StringTranslate,2
p_98061_2_,par2,2
p_98061_3_,par3,2
p_98062_1_,par1,2
p_98063_1_,par1,2
p_98072_0_,par0GuiScreenOnlineServers,2
p_98074_0_,par0GuiScreenOnlineServers,2
p_98075_0_,par0GuiScreenOnlineServers,2
p_98076_0_,par0GuiScreenOnlineServers,2
p_98078_0_,par0GuiScreenOnlineServers,2
p_98078_1_,par1,2
p_98079_0_,par0GuiScreenOnlineServers,2
p_98081_0_,par0GuiScreenOnlineServers,2
p_98081_1_,par1,2
p_98084_0_,par0GuiScreenOnlineServers,2
p_98086_1_,par1,2
p_98087_0_,par0GuiScreenOnlineServers,2
p_98089_0_,par0GuiScreenOnlineServers,2
p_98089_1_,par1,2
p_98091_0_,par0GuiScreenOnlineServers,2
p_98092_0_,par0GuiScreenOnlineServers,2
p_98094_0_,par0GuiScreenOnlineServers,2
p_98096_0_,par0GuiConnecting,2
p_98097_0_,par0GuiConnecting,2
p_98099_0_,par0GuiScreenCreateOnlineWorld,2
p_98100_0_,par0GuiScreenCreateOnlineWorld,2
p_98100_1_,par1Location,2
p_98101_0_,par0GuiScreenCreateOnlineWorld,2
p_98102_0_,par0GuiScreenCreateOnlineWorld,2
p_98102_1_,par1List,2
p_98103_0_,par0GuiScreenCreateOnlineWorld,2
p_98137_1_,par1Str,2
p_98137_2_,par2,2
p_98138_1_,par1Str,2
@@ -8025,12 +8077,8 @@ p_98162_0_,par0Str,2
p_98163_0_,par0JsonNode,2
p_98164_0_,par0List,2
p_98165_0_,par0Str,2
p_98167_0_,par0JsonNode,2
p_98168_0_,par0JsonNode,2
p_98168_1_,par1Str,2
p_98169_0_,par0Str,2
p_98172_0_,par0TaskOnlineConnect,2
p_98174_0_,par0Str,2
p_98176_1_,par1,2
p_98177_1_,par1,2
p_98179_1_,par1,2
@@ -8125,11 +8173,9 @@ p_i10003_1_,par1,2
p_i10003_2_,par2,2
p_i10004_1_,par1,2
p_i10004_2_,par2,2
p_i10005_1_,par1,2
p_i10005_2_,par2,2
p_i10005_1_,par1ScorePlayerTeam,2
p_i10005_2_,par2Collection,2
p_i10005_3_,par3,2
p_i10005_4_,par4Str,2
p_i10005_5_,par5Str,2
p_i10006_1_,par1,2
p_i10006_2_,par2,2
p_i10007_1_,par1,2
@@ -8139,8 +8185,6 @@ p_i10008_3_,par3TaskLongRunning,2
p_i10009_1_,par1GuiSlotOnlineServerList,2
p_i10009_2_,par2McoServer,2
p_i10010_1_,par1GuiScreen,2
p_i10011_1_,par1GuiScreenResetWorld,2
p_i10011_2_,par2,2
p_i10012_1_,par1Minecraft,2
p_i10012_2_,par2,2
p_i10012_3_,par3,2
@@ -8152,10 +8196,6 @@ p_i10013_2_,par2GuiScreen,2
p_i10013_3_,par3McoServer,2
p_i10014_1_,par1GuiScreen,2
p_i10014_2_,par2McoServer,2
p_i10017_1_,par1GuiScreenCreateOnlineWorld,2
p_i10017_2_,par2Str,2
p_i10017_3_,par3Str,2
p_i10017_4_,par4Str,2
p_i10018_1_,par1TaskOnlineConnect,2
p_i10018_2_,par2Str,2
p_i10018_3_,par3,2
@@ -8257,7 +8297,6 @@ p_i11007_1_,par1GuiScreen,2
p_i11007_2_,par2Str,2
p_i11007_3_,par3Str,2
p_i11007_4_,par4ArrayOfObj,2
p_i11008_1_,par1GuiScreenCreateOnlineWorld,2
p_i11011_1_,par1GuiScreenOnlineServers,2
p_i11012_1_,par1Minecraft,2
p_i11012_2_,par2Str,2
@@ -8417,6 +8456,29 @@ p_i22009_5_,par5,2
p_i22009_6_,par6,2
p_i22009_7_,par7,2
p_i22009_8_,par8,2
p_i23000_1_,par1,2
p_i23000_2_,par2,2
p_i23000_3_,par3,2
p_i23000_4_,par4,2
p_i23001_1_,par1Minecraft,2
p_i23001_2_,par2,2
p_i23001_3_,par3,2
p_i23001_4_,par4,2
p_i23001_5_,par5,2
p_i23001_6_,par6,2
p_i23002_1_,par1GuiScreenResetWorld,2
p_i23002_2_,par2,2
p_i23002_4_,par4Str,2
p_i23003_1_,par1GuiScreenCreateOnlineWorld,2
p_i23003_2_,par2Str,2
p_i23003_3_,par3Str,2
p_i23003_4_,par4Str,2
p_i23003_5_,par5Str,2
p_i23004_1_,par1GuiScreen,2
p_i23004_2_,par2Str,2
p_i23004_3_,par3,2
p_i23004_4_,par4,2
p_i23005_1_,par1GuiMainMenu,2
p_i3000_1_,par1File,2
p_i3000_2_,par2Minecraft,2
p_i3001_1_,par1Map,2
@@ -8622,9 +8684,6 @@ p_i3101_1_,par1Minecraft,2
p_i3101_2_,par2World,2
p_i3101_3_,par3Session,2
p_i3101_4_,par4NetClientHandler,2
p_i3102_1_,par1GuiScreen,2
p_i3102_2_,par2Str,2
p_i3102_3_,par3,2
p_i3103_1_,par1Minecraft,2
p_i3103_2_,par2Str,2
p_i3103_3_,par3,2
1 param name side
10 p_101001_2_ par2 2
11 p_101001_3_ par3 2
12 p_101001_4_ par4 2
p_101002_0_ par0GuiScreenOnlineServers 2
p_101002_1_ par1McoServer 2
p_101003_0_ par0GuiScreenOnlineServers 2
p_101003_1_ par1 2
p_101003_2_ par2 2
p_101003_3_ par3 2
p_101003_4_ par4 2
p_101004_0_ par0GuiScreenOnlineServers 2
p_101005_0_ par0GuiScreenOnlineServers 2
13 p_101006_1_ par1 2
14 p_101006_2_ par2 2
15 p_101006_3_ par3 2
23 p_101009_2_ par2 2
24 p_101009_3_ par3 2
25 p_101009_4_ par4 2
p_101011_0_ par0GuiScreenOnlineServers 2
p_101011_1_ par1Str 2
26 p_101012_0_ par0GuiScreenOnlineServers 2
27 p_101012_1_ par1 2
28 p_101012_2_ par2 2
67 p_102027_5_ par5 2
68 p_102027_6_ par6 2
69 p_102027_7_ par7 2
70 p_104004_0_ par0GuiMainMenu 2
71 p_104005_0_ par0GuiMainMenu 2
72 p_104005_1_ par1Str 2
73 p_104006_0_ par0GuiMainMenu 2
74 p_104006_1_ par1 2
75 p_104007_0_ par0GuiMainMenu 2
76 p_104008_0_ par0GuiMainMenu 2
77 p_104008_1_ par1 2
78 p_104009_0_ par0GuiMainMenu 2
79 p_104009_1_ par1 2
80 p_104010_0_ par0 2
81 p_104011_0_ par0GuiMainMenu 2
82 p_104011_1_ par1 2
83 p_104012_0_ par0GuiMainMenu 2
84 p_104012_1_ par1 2
85 p_104013_0_ par0GuiMainMenu 2
86 p_104013_1_ par1Str 2
87 p_104014_0_ par0GuiMainMenu 2
88 p_104014_1_ par1 2
89 p_104015_0_ par0GuiMainMenu 2
90 p_104016_0_ par0GuiMainMenu 2
91 p_104017_0_ par0GuiMainMenu 2
92 p_104018_0_ par0GuiMainMenu 2
93 p_104019_0_ par0GuiMainMenu 2
94 p_104020_0_ par0GuiMainMenu 2
95 p_104021_0_ par0GuiMainMenu 2
96 p_104021_1_ par1StringTranslate 2
97 p_104021_2_ par2 2
98 p_104021_3_ par3 2
99 p_104022_0_ par0GuiMainMenu 2
100 p_104023_0_ par0GuiMainMenu 2
101 p_104026_0_ par0GuiScreenOnlineServers 2
102 p_104026_1_ par1Str 2
103 p_104027_0_ par0GuiScreenOnlineServers 2
104 p_104028_0_ par0GuiScreenOnlineServers 2
105 p_104029_0_ par0GuiScreenOnlineServers 2
106 p_104030_0_ par0GuiScreenOnlineServers 2
107 p_104030_1_ par1 2
108 p_104030_2_ par2 2
109 p_104030_3_ par3 2
110 p_104030_4_ par4 2
111 p_104030_5_ par5 2
112 p_104031_0_ par0GuiScreenOnlineServers 2
113 p_104031_1_ par1 2
114 p_104031_2_ par2 2
115 p_104031_3_ par3 2
116 p_104031_4_ par4 2
117 p_104032_0_ par0GuiScreenOnlineServers 2
118 p_104033_0_ par0GuiScreenOnlineServers 2
119 p_104034_0_ par0GuiScreenOnlineServers 2
120 p_104034_1_ par1McoServer 2
121 p_104036_0_ par0GuiScreenOnlineServers 2
122 p_104038_0_ par0GuiScreenOnlineServers 2
123 p_104039_1_ par1 2
124 p_104039_2_ par2 2
125 p_104039_3_ par3 2
126 p_104039_4_ par4 2
127 p_104039_5_ par5 2
128 p_104040_0_ par0GuiScreenOnlineServers 2
129 p_104043_0_ par0GuiScreenOnlineServers 2
130 p_104047_0_ par0GuiScreenCreateOnlineWorld 2
131 p_104048_0_ par0GuiScreenCreateOnlineWorld 2
132 p_104055_1_ par1 2
133 p_104062_1_ par1 2
134 p_104062_2_ par2 2
135 p_104062_3_ par3Texture 2
136 p_104064_0_ par0Str 2
137 p_104064_1_ par1Str 2
138 p_104064_2_ par2 2
139 p_104064_3_ par3 2
140 p_104069_1_ par1GuiButton 2
141 p_104071_1_ par1GuiScreen 2
142 p_104071_2_ par2FontRenderer 2
143 p_104083_1_ par1 2
144 p_104083_2_ par2 2
145 p_104083_3_ par3 2
146 p_104083_4_ par4 2
147 p_104084_1_ par1 2
148 p_104084_2_ par2 2
149 p_104084_3_ par3 2
150 p_104084_4_ par4 2
151 p_104086_1_ par1 2
152 p_104087_1_ par1 2
153 p_104087_2_ par2 2
154 p_104088_1_ par1 2
155 p_104088_2_ par2 2
156 p_104088_3_ par3Tessellator 2
157 p_104089_1_ par1 2
158 p_104089_2_ par2 2
159 p_104145_0_ par0URL 2
160 p_70000_1_ par1PlayerUsageSnooper 2
161 p_70001_1_ par1PlayerUsageSnooper 2
162 p_70003_1_ par1 2
7740 p_96177_0_ par0GuiScreenOnlineServers 2
7741 p_96209_1_ par1Str 2
7742 p_96210_1_ par1Str 2
p_96230_0_ par0GuiScreenSelectLocation 2
p_96231_0_ par0GuiScreenSelectLocation 2
p_96232_0_ par0GuiScreenSelectLocation 2
p_96233_0_ par0GuiScreenSelectLocation 2
p_96234_0_ par0GuiScreenSelectLocation 2
p_96234_1_ par1Location 2
p_96235_0_ par0GuiScreenSelectLocation 2
p_96236_0_ par0GuiScreenSelectLocation 2
p_96246_0_ par0GuiScreenCreateOnlineWorld 2
p_96247_0_ par0GuiScreenCreateOnlineWorld 2
7743 p_96248_0_ par0GuiScreenCreateOnlineWorld 2
p_96251_1_ par1Location 2
p_96251_2_ par2Str 2
p_96251_3_ par3Str 2
7744 p_96263_0_ par0GuiScreenConfigureWorld 2
7745 p_96264_1_ par1 2
7746 p_96265_0_ par0GuiScreenConfigureWorld 2
7829 p_96363_1_ par1Str 2
7830 p_96374_1_ par1 2
7831 p_96376_1_ par1 2
7832 p_96376_3_ par3Str 2
7833 p_96377_1_ par1Request 2
7834 p_96378_1_ par1 2
7835 p_96380_1_ par1Str 2
7839 p_96384_1_ par1 2
7840 p_96384_3_ par3Str 2
7841 p_96384_4_ par4Str 2
7842 p_96384_5_ par5 2
7843 p_96384_6_ par6 2
7844 p_96386_1_ par1Str 2
7845 p_96386_2_ par2Str 2
7846 p_96386_3_ par3Str 2
7847 p_96386_4_ par4Str 2
7848 p_96387_1_ par1 2
7849 p_96387_3_ par3Str 2
7850 p_96394_0_ par0Field 2
8031 p_98053_1_ par1 2
8032 p_98054_1_ par1 2
8033 p_98055_1_ par1 2
p_98058_0_ par0GuiMainMenu 2
p_98059_0_ par0 2
8034 p_98060_1_ par1StringTranslate 2
8035 p_98060_2_ par2 2
8036 p_98060_3_ par3 2
p_98061_0_ par0GuiMainMenu 2
p_98061_1_ par1StringTranslate 2
p_98061_2_ par2 2
p_98061_3_ par3 2
8037 p_98062_1_ par1 2
8038 p_98063_1_ par1 2
8039 p_98072_0_ par0GuiScreenOnlineServers 2
p_98074_0_ par0GuiScreenOnlineServers 2
8040 p_98075_0_ par0GuiScreenOnlineServers 2
8041 p_98076_0_ par0GuiScreenOnlineServers 2
8042 p_98078_0_ par0GuiScreenOnlineServers 2
8043 p_98078_1_ par1 2
p_98079_0_ par0GuiScreenOnlineServers 2
8044 p_98081_0_ par0GuiScreenOnlineServers 2
8045 p_98081_1_ par1 2
p_98084_0_ par0GuiScreenOnlineServers 2
8046 p_98086_1_ par1 2
p_98087_0_ par0GuiScreenOnlineServers 2
8047 p_98089_0_ par0GuiScreenOnlineServers 2
8048 p_98089_1_ par1 2
p_98091_0_ par0GuiScreenOnlineServers 2
8049 p_98092_0_ par0GuiScreenOnlineServers 2
8050 p_98094_0_ par0GuiScreenOnlineServers 2
8051 p_98096_0_ par0GuiConnecting 2
8052 p_98097_0_ par0GuiConnecting 2
p_98099_0_ par0GuiScreenCreateOnlineWorld 2
p_98100_0_ par0GuiScreenCreateOnlineWorld 2
p_98100_1_ par1Location 2
p_98101_0_ par0GuiScreenCreateOnlineWorld 2
p_98102_0_ par0GuiScreenCreateOnlineWorld 2
p_98102_1_ par1List 2
p_98103_0_ par0GuiScreenCreateOnlineWorld 2
8053 p_98137_1_ par1Str 2
8054 p_98137_2_ par2 2
8055 p_98138_1_ par1Str 2
8077 p_98163_0_ par0JsonNode 2
8078 p_98164_0_ par0List 2
8079 p_98165_0_ par0Str 2
p_98167_0_ par0JsonNode 2
p_98168_0_ par0JsonNode 2
p_98168_1_ par1Str 2
8080 p_98169_0_ par0Str 2
8081 p_98172_0_ par0TaskOnlineConnect 2
p_98174_0_ par0Str 2
8082 p_98176_1_ par1 2
8083 p_98177_1_ par1 2
8084 p_98179_1_ par1 2
8173 p_i10003_2_ par2 2
8174 p_i10004_1_ par1 2
8175 p_i10004_2_ par2 2
8176 p_i10005_1_ par1 par1ScorePlayerTeam 2
8177 p_i10005_2_ par2 par2Collection 2
8178 p_i10005_3_ par3 2
p_i10005_4_ par4Str 2
p_i10005_5_ par5Str 2
8179 p_i10006_1_ par1 2
8180 p_i10006_2_ par2 2
8181 p_i10007_1_ par1 2
8185 p_i10009_1_ par1GuiSlotOnlineServerList 2
8186 p_i10009_2_ par2McoServer 2
8187 p_i10010_1_ par1GuiScreen 2
p_i10011_1_ par1GuiScreenResetWorld 2
p_i10011_2_ par2 2
8188 p_i10012_1_ par1Minecraft 2
8189 p_i10012_2_ par2 2
8190 p_i10012_3_ par3 2
8196 p_i10013_3_ par3McoServer 2
8197 p_i10014_1_ par1GuiScreen 2
8198 p_i10014_2_ par2McoServer 2
p_i10017_1_ par1GuiScreenCreateOnlineWorld 2
p_i10017_2_ par2Str 2
p_i10017_3_ par3Str 2
p_i10017_4_ par4Str 2
8199 p_i10018_1_ par1TaskOnlineConnect 2
8200 p_i10018_2_ par2Str 2
8201 p_i10018_3_ par3 2
8297 p_i11007_2_ par2Str 2
8298 p_i11007_3_ par3Str 2
8299 p_i11007_4_ par4ArrayOfObj 2
p_i11008_1_ par1GuiScreenCreateOnlineWorld 2
8300 p_i11011_1_ par1GuiScreenOnlineServers 2
8301 p_i11012_1_ par1Minecraft 2
8302 p_i11012_2_ par2Str 2
8456 p_i22009_6_ par6 2
8457 p_i22009_7_ par7 2
8458 p_i22009_8_ par8 2
8459 p_i23000_1_ par1 2
8460 p_i23000_2_ par2 2
8461 p_i23000_3_ par3 2
8462 p_i23000_4_ par4 2
8463 p_i23001_1_ par1Minecraft 2
8464 p_i23001_2_ par2 2
8465 p_i23001_3_ par3 2
8466 p_i23001_4_ par4 2
8467 p_i23001_5_ par5 2
8468 p_i23001_6_ par6 2
8469 p_i23002_1_ par1GuiScreenResetWorld 2
8470 p_i23002_2_ par2 2
8471 p_i23002_4_ par4Str 2
8472 p_i23003_1_ par1GuiScreenCreateOnlineWorld 2
8473 p_i23003_2_ par2Str 2
8474 p_i23003_3_ par3Str 2
8475 p_i23003_4_ par4Str 2
8476 p_i23003_5_ par5Str 2
8477 p_i23004_1_ par1GuiScreen 2
8478 p_i23004_2_ par2Str 2
8479 p_i23004_3_ par3 2
8480 p_i23004_4_ par4 2
8481 p_i23005_1_ par1GuiMainMenu 2
8482 p_i3000_1_ par1File 2
8483 p_i3000_2_ par2Minecraft 2
8484 p_i3001_1_ par1Map 2
8684 p_i3101_2_ par2World 2
8685 p_i3101_3_ par3Session 2
8686 p_i3101_4_ par4NetClientHandler 2
p_i3102_1_ par1GuiScreen 2
p_i3102_2_ par2Str 2
p_i3102_3_ par3 2
8687 p_i3103_1_ par1Minecraft 2
8688 p_i3103_2_ par2Str 2
8689 p_i3103_3_ par3 2
+84 -49
View File
@@ -5,75 +5,110 @@ import java.lang.reflect.Field;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Arrays;
import joptsimple.ArgumentAcceptingOptionSpec;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import net.minecraft.client.Minecraft;
import net.minecraft.client.main.Main;
public class Start
{
public static void main(String[] args)
public static void main(String[] args) throws Exception
{
int userIndex = -1;
int passIndex = -1;
int sessIndex = -1;
int versIndex = -1;
for( int x = 0; x < args.length; x++)
{
if (args[x].equals("--username")) userIndex = x + 1;
else if (args[x].equals("--password")) passIndex = x + 1;
else if (args[x].equals("--session")) sessIndex = x + 1;
else if (args[x].equals("--version")) versIndex = x + 1;
}
if (userIndex != 0-1 && passIndex != -1 && sessIndex == -1)
{
String[] session = getSession(args[userIndex], args[passIndex]);
if (session != null)
{
args[userIndex] = session[0];
args = concat(args, new String[]{"--session", session[1]});
}
}
//Kill the password if its there so it isn't printed to the console.
if (passIndex != -1)
{
args[passIndex-1] = "no_password_for_joo";
args[passIndex] = "no_password_for_joo";
}
if (versIndex == -1)
{
args = concat(args, new String[]{ "--version", "fml_mcp" });
}
Main.main(args);
}
private static String[] getSession(String username, String password) throws UnsupportedEncodingException
{
String parameters = "http://login.minecraft.net/?user=" + URLEncoder.encode(username, "UTF-8") +
"&password=" + URLEncoder.encode(password, "UTF-8") +
"&version=" + 13;
String result = openUrl(parameters);
if (result == null)
{
System.out.println("Can't connect to minecraft.net");
return null;
}
if (!result.contains(":"))
{
System.out.println("Login Failed: " + result);
return null;
}
String[] values = result.split(":");
return new String[]{ values[2].trim(), values[3].trim() };
}
private static String openUrl(String addr)
{
try
{
Field f = Minecraft.class.getDeclaredField("field_71463_am");
Field.setAccessible(new Field[] { f }, true);
f.set(null, new File("."));
}
catch (Exception e)
{
e.printStackTrace();
return;
}
if (args.length != 2)
{
Minecraft.main(args);
}
else
{
try {
String parameters = "http://login.minecraft.net/?user=" + URLEncoder.encode(args[0], "UTF-8") +
"&password=" + URLEncoder.encode(args[1], "UTF-8") +
"&version=" + 13;
String result = openUrl(parameters);
if (result == null)
{
System.out.println("Can't connect to minecraft.net");
return;
}
if (!result.contains(":"))
{
System.out.println("Login Failed: " + result);
return;
}
//latestVersion, downloadTicket, userName, sessionId
String[] values = result.split(":");
Minecraft.main(new String[]{values[2].trim(), values[3].trim()});
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static String openUrl(String addr)
{
try {
URL url = new URL(addr);
java.io.InputStream is;
is = url.openConnection().getInputStream();
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(is));
String buf = "";
String line = null;
while((line = reader.readLine() ) != null)
while ((line = reader.readLine()) != null)
{
buf += "\n" + line;
buf += "\n" + line;
}
reader.close();
return buf;
} catch (IOException e) {
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
private static <T> T[] concat(T[] first, T[] second)
{
T[] result = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
}
+30 -30
View File
@@ -1,7 +1,7 @@
diff -r -U 3 minecraft\net\minecraft\client\Minecraft.java minecraft_patched\net\minecraft\client\Minecraft.java
--- minecraft\net\minecraft\client\Minecraft.java Tue Mar 19 21:24:34 2013
+++ minecraft_patched\net\minecraft\client\Minecraft.java Tue Mar 19 21:26:27 2013
@@ -531,9 +531,8 @@
--- 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;
}
@@ -12,7 +12,7 @@ diff -r -U 3 minecraft\net\minecraft\client\Minecraft.java minecraft_patched\net
if(this.field_71434_R && this.field_71433_S != null) {
this.func_71377_b(this.field_71433_S);
return;
@@ -551,7 +550,6 @@
@@ -552,7 +551,6 @@
this.func_71373_a(new GuiMemoryErrorScreen());
System.gc();
}
@@ -20,7 +20,7 @@ diff -r -U 3 minecraft\net\minecraft\client\Minecraft.java minecraft_patched\net
}
} catch (MinecraftError var12) {
;
@@ -569,8 +567,6 @@
@@ -570,8 +568,6 @@
this.func_71405_e();
}
@@ -30,8 +30,8 @@ diff -r -U 3 minecraft\net\minecraft\client\Minecraft.java minecraft_patched\net
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 Tue Mar 19 21:24:35 2013
+++ minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java Tue Mar 19 21:26:27 2013
--- 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
@@ -21,9 +21,14 @@
public String func_85085_a() {
@@ -51,8 +51,8 @@ diff -r -U 3 minecraft\net\minecraft\src\CallableSuspiciousClasses.java minecraf
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 Tue Mar 19 21:24:35 2013
+++ minecraft_patched\net\minecraft\src\CodecMus.java Tue Mar 19 21:26:27 2013
--- 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;
@@ -73,8 +73,8 @@ diff -r -U 3 minecraft\net\minecraft\src\CodecMus.java minecraft_patched\net\min
}
}
diff -r -U 3 minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java
--- minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Mar 19 21:24:35 2013
+++ minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Mar 19 21:26:27 2013
--- 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
@@ -11,6 +11,10 @@
public class ComponentStrongholdRightTurn extends ComponentStrongholdLeftTurn {
@@ -87,9 +87,9 @@ diff -r -U 3 minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java minec
if(this.field_74885_f != 2 && this.field_74885_f != 3) {
this.func_74989_b((ComponentStrongholdStairs2)p_74861_1_, p_74861_2_, p_74861_3_, 1, 1);
diff -r -U 3 minecraft\net\minecraft\src\DedicatedServer.java minecraft_patched\net\minecraft\src\DedicatedServer.java
--- minecraft\net\minecraft\src\DedicatedServer.java Tue Mar 19 21:24:35 2013
+++ minecraft_patched\net\minecraft\src\DedicatedServer.java Tue Mar 19 21:26:27 2013
@@ -206,7 +206,7 @@
--- 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 @@
System.exit(0);
}
@@ -99,8 +99,8 @@ 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 Tue Mar 19 21:24:36 2013
+++ minecraft_patched\net\minecraft\src\EnumChatFormatting.java Tue Mar 19 21:26:27 2013
--- 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
@@ -38,7 +38,7 @@
private final String field_96304_B;
@@ -111,8 +111,8 @@ diff -r -U 3 minecraft\net\minecraft\src\EnumChatFormatting.java minecraft_patch
private EnumChatFormatting(char p_i10001_3_, boolean p_i10001_4_) {
diff -r -U 3 minecraft\net\minecraft\src\FontRenderer.java minecraft_patched\net\minecraft\src\FontRenderer.java
--- minecraft\net\minecraft\src\FontRenderer.java Tue Mar 19 21:24:36 2013
+++ minecraft_patched\net\minecraft\src\FontRenderer.java Tue Mar 19 21:26:27 2013
--- 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 @@
case 10:
--var5;
@@ -132,8 +132,8 @@ diff -r -U 3 minecraft\net\minecraft\src\FontRenderer.java minecraft_patched\net
var4 += this.func_78263_a(var8);
if(var7) {
diff -r -U 3 minecraft\net\minecraft\src\IntegratedServer.java minecraft_patched\net\minecraft\src\IntegratedServer.java
--- minecraft\net\minecraft\src\IntegratedServer.java Tue Mar 19 21:24:37 2013
+++ minecraft_patched\net\minecraft\src\IntegratedServer.java Tue Mar 19 21:26:27 2013
--- 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 @@
return true;
}
@@ -144,8 +144,8 @@ diff -r -U 3 minecraft\net\minecraft\src\IntegratedServer.java minecraft_patched
this.field_71348_o = this.field_71347_n.func_71752_f();
if(!var1 && this.field_71348_o) {
diff -r -U 3 minecraft\net\minecraft\src\RConThreadClient.java minecraft_patched\net\minecraft\src\RConThreadClient.java
--- minecraft\net\minecraft\src\RConThreadClient.java Tue Mar 19 21:24:38 2013
+++ minecraft_patched\net\minecraft\src\RConThreadClient.java Tue Mar 19 21:26:27 2013
--- 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
@@ -32,8 +32,8 @@
}
@@ -186,8 +186,8 @@ diff -r -U 3 minecraft\net\minecraft\src\RConThreadClient.java minecraft_patched
private void func_72654_a(int p_72654_1_, int p_72654_2_, String p_72654_3_) throws IOException {
diff -r -U 3 minecraft\net\minecraft\src\RenderBlocks.java minecraft_patched\net\minecraft\src\RenderBlocks.java
--- minecraft\net\minecraft\src\RenderBlocks.java Tue Mar 19 21:24:38 2013
+++ minecraft_patched\net\minecraft\src\RenderBlocks.java Tue Mar 19 21:26:27 2013
--- 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 @@
float var25 = (float)(p_78589_2_ + 1);
float var26 = (float)(p_78589_4_ + 0);
@@ -219,8 +219,8 @@ 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 Tue Mar 19 21:24:38 2013
+++ minecraft_patched\net\minecraft\src\RenderGlobal.java Tue Mar 19 21:26:27 2013
--- 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 @@
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_;
@@ -231,8 +231,8 @@ diff -r -U 3 minecraft\net\minecraft\src\RenderGlobal.java minecraft_patched\net
this.field_72777_q.field_71452_i.func_78873_a(var21 = new EntityHugeExplodeFX(this.field_72769_h, p_72726_2_, p_72726_4_, p_72726_6_, p_72726_8_, p_72726_10_, p_72726_12_));
} else if(p_72726_1_.equals("largeexplode")) {
diff -r -U 3 minecraft\net\minecraft\src\TcpMasterThread.java minecraft_patched\net\minecraft\src\TcpMasterThread.java
--- minecraft\net\minecraft\src\TcpMasterThread.java Tue Mar 19 21:24:38 2013
+++ minecraft_patched\net\minecraft\src\TcpMasterThread.java Tue Mar 19 21:26:27 2013
--- 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
@@ -11,6 +11,7 @@
this.field_74504_a = p_i3285_1_;
}
@@ -242,8 +242,8 @@ diff -r -U 3 minecraft\net\minecraft\src\TcpMasterThread.java minecraft_patched\
try {
Thread.sleep(5000L);
diff -r -U 3 minecraft\net\minecraft\src\ThreadedFileIOBase.java minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java
--- minecraft\net\minecraft\src\ThreadedFileIOBase.java Tue Mar 19 21:24:39 2013
+++ minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java Tue Mar 19 21:26:27 2013
--- 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 @@
}
+17 -17
View File
@@ -1,6 +1,6 @@
diff -r -U 3 minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java
--- minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java Tue Mar 19 21:25:52 2013
+++ minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java Tue Mar 19 21:26:37 2013
--- 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
@@ -21,9 +21,14 @@
public String func_85085_a() {
@@ -20,8 +20,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java m
boolean var5 = !CrashReport.class.getCanonicalName().equals("net.minecraft.CrashReport");
HashMap var6 = new HashMap();
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 Tue Mar 19 21:25:52 2013
+++ minecraft_server_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Mar 19 21:26:37 2013
--- 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
@@ -11,6 +11,10 @@
public class ComponentStrongholdRightTurn extends ComponentStrongholdLeftTurn {
@@ -34,9 +34,9 @@ diff -r -U 3 minecraft_server\net\minecraft\src\ComponentStrongholdRightTurn.jav
if(this.field_74885_f != 2 && this.field_74885_f != 3) {
this.func_74989_b((ComponentStrongholdStairs2)p_74861_1_, p_74861_2_, p_74861_3_, 1, 1);
diff -r -U 3 minecraft_server\net\minecraft\src\DedicatedServer.java minecraft_server_patched\net\minecraft\src\DedicatedServer.java
--- minecraft_server\net\minecraft\src\DedicatedServer.java Tue Mar 19 21:25:53 2013
+++ minecraft_server_patched\net\minecraft\src\DedicatedServer.java Tue Mar 19 21:26:37 2013
@@ -207,7 +207,7 @@
--- 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 @@
System.exit(0);
}
@@ -46,8 +46,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\DedicatedServer.java minecraft_s
this.func_71333_ah();
}
diff -r -U 3 minecraft_server\net\minecraft\src\EnumChatFormatting.java minecraft_server_patched\net\minecraft\src\EnumChatFormatting.java
--- minecraft_server\net\minecraft\src\EnumChatFormatting.java Tue Mar 19 21:25:53 2013
+++ minecraft_server_patched\net\minecraft\src\EnumChatFormatting.java Tue Mar 19 21:26:37 2013
--- 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
@@ -38,7 +38,7 @@
private final String field_96304_B;
@@ -58,8 +58,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\EnumChatFormatting.java minecraf
private EnumChatFormatting(char p_i10001_3_, boolean p_i10001_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 Tue Mar 19 21:25:54 2013
+++ minecraft_server_patched\net\minecraft\src\MemoryConnection.java Tue Mar 19 21:26:37 2013
--- 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;
@@ -91,8 +91,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\MemoryConnection.java minecraft_
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 Tue Mar 19 21:25:54 2013
+++ minecraft_server_patched\net\minecraft\src\RConThreadClient.java Tue Mar 19 21:26:37 2013
--- 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
@@ -32,8 +32,8 @@
}
@@ -133,8 +133,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\RConThreadClient.java minecraft_
private void func_72654_a(int p_72654_1_, int p_72654_2_, String p_72654_3_) throws IOException {
diff -r -U 3 minecraft_server\net\minecraft\src\TcpMasterThread.java minecraft_server_patched\net\minecraft\src\TcpMasterThread.java
--- minecraft_server\net\minecraft\src\TcpMasterThread.java Tue Mar 19 21:25:54 2013
+++ minecraft_server_patched\net\minecraft\src\TcpMasterThread.java Tue Mar 19 21:26:37 2013
--- 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
@@ -11,6 +11,7 @@
this.field_74504_a = p_i3285_1_;
}
@@ -144,8 +144,8 @@ diff -r -U 3 minecraft_server\net\minecraft\src\TcpMasterThread.java minecraft_s
try {
Thread.sleep(5000L);
diff -r -U 3 minecraft_server\net\minecraft\src\ThreadedFileIOBase.java minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java
--- minecraft_server\net\minecraft\src\ThreadedFileIOBase.java Tue Mar 19 21:25:54 2013
+++ minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java Tue Mar 19 21:26:37 2013
--- 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 @@
}
+3 -3
View File
@@ -1,4 +1,4 @@
[VERSION]
MCPVersion = 7.44
ClientVersion = 1.5.1
ServerVersion = 1.5.1
MCPVersion = 7.51
ClientVersion = 1.5.2
ServerVersion = 1.5.2
+14 -10
View File
@@ -2,19 +2,23 @@ import urllib
import zipfile
import sys
import os
from optparse import OptionParser
if __name__ == '__main__':
if not len(sys.argv) >= 3:
print 'Invalid arguments, must supply mcp folder and fml folder: decompile.py <MCPFolder> <FMLFolder>'
parser = OptionParser()
parser.add_option('-g', '--gen-conf', action="store_true", dest='gen_conf', help='Generate merged MCP conf folder', default=False)
parser.add_option('-m', '--mcp-dir', action='store', dest='mcp_dir', help='Path to download/extract MCP to', default=None )
parser.add_option('-f', '--fml-dir', action='store', dest='fml_dir', help='Path to FML install folder', default=None )
options, _ = parser.parse_args()
if options.fml_dir is None or options.mcp_dir is None:
print 'Invalid arguments, must supply mcp folder and fml folder: decompile.py --mcp-dir <MCPFolder> --fml-dir <FMLFolder>'
else:
mcp_dir = os.path.abspath(sys.argv[1])
fml_dir = os.path.abspath(sys.argv[2])
dont_gen_conf = '-no_gen_conf' in sys.argv
sys.path.append(os.path.join(options.fml_dir, 'install'))
sys.path.append(os.path.join(fml_dir, 'install'))
from fml import decompile_minecraft, setup_mcp, download_mcp
from fml import setup_fml, setup_mcp
setup_mcp(fml_dir, mcp_dir, dont_gen_conf)
setup_fml(fml_dir, mcp_dir)
download_mcp(fml_dir=options.fml_dir, mcp_dir=options.mcp_dir)
setup_mcp(options.fml_dir, options.mcp_dir, gen_conf=options.gen_conf)
decompile_minecraft(options.fml_dir, options.mcp_dir)
Loaded 100 of 157 files, more files were not shown because too many files have changed in this diff. Show more