Compare commits

..
132 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
Christian 012a755bb9 Fix up patch properly. Also, fix md5s for the jars. 2013-03-22 01:48:21 -04:00
cpw 748eece456 Merge pull request #206 from mDiyo/patch-1
Fix missing block world rendering
2013-03-21 07:41:35 -07:00
mDiyo f709ce7579 Fix missing block world rendering 2013-03-21 07:10:55 -07:00
LexManos 33efc35b60 Merge MC 1.5.1 branch to master. 2013-03-21 04:10:30 -07:00
LexManos 687d3c059d Merge pull request #204 from agaricusb/fix-mcpdir
Fix install.py --mcp-dir option
2013-03-20 10:24:27 -07:00
LexManos aaf02ea2ac Updated for new PR client jar. 2013-03-20 08:59:25 -07:00
Agaricus 625da6492d Fix install.py --mcp-dir option. Fixes #204. 2013-03-19 21:42:04 -07:00
LexManos a573faf92d Someone derped up this function bad, revert name. 2013-03-19 17:54:06 -07:00
LexManos 9565529baf Updated to latest MCP and Minecraft 1.5.1 Pre-release. 2013-03-19 15:48:42 -07:00
LexManos 3c346247e1 Fix NPE with CoreMods who do not have the new MCVersion annotation. 2013-03-19 13:48:18 -07:00
Christian ce949e6099 Support simple mc version test in coremods, only effective through
jar loading.
Also, log some more data about the environment.
2013-03-17 23:40:12 -04:00
Christian 5e3af8ac0e Use the relaunch log, for class circularity safety. 2013-03-17 23:19:39 -04:00
Christian 5cc90f060c Fix the logger to treat newlines better, hopefully. Closes #199 2013-03-17 23:15:18 -04:00
LexManos 577b19c1cf Fix potential NPE in class loading and add extra debug information. 2013-03-17 11:54:26 -07:00
cpw 8905237306 Merge pull request #200 from bspkrs/patch-2
Added comments to note FML-only methods
2013-03-14 18:37:08 -07:00
Christian c5d5f4e516 Fix AllPublic access transformer not affecting methods. Should fix modloader
compatibility
2013-03-14 15:53:19 -04:00
bspkrs 24022ab6ba Added comments to note FML-only methods 2013-03-14 01:29:36 -03:00
LexManos 6370c242f0 OS X's python 2.6.1 has a bug in zipfile.extractall that makes it unzip directories as regular files. So switch to extract 2013-03-13 13:11:43 -07:00
LexManos 4762d4d8ef Allocate more ram {typically 256 is defailt} to fermflower, should fix decomplication issues on OSX 2013-03-13 13:11:10 -07:00
Christian 8f2dbf7046 Fix up stupid derp in IMC code: actually reset the IMC list after
each delivery. Fixes a bunch of mods. Sorry everyone.
2013-03-13 15:09:50 -04:00
Christian 23ea835fa7 Pass obfuscation status to coremods 2013-03-12 21:06:37 -04:00
Christian d88db6c0cf Fix up deep tree deobfuscation 2013-03-12 20:33:19 -04:00
LexManos c6dab815f4 Missed joined.exc, must fix scripts. 2013-03-12 15:12:49 -07:00
LexManos 7b722bfcd6 Update MCP for latest PR silent update. 2013-03-12 15:02:58 -07:00
LexManos a90504315e Readjust size of mods button when Minecraft Realms button is enabled. 2013-03-11 16:20:56 -07:00
Christian 3765ceb02d Update MCP, fixes the "broken texture packs" problem. 2013-03-11 16:31:26 -04:00
Christian dab22f5b74 Fix "0 mods" display when installed in forge. 2013-03-10 12:12:22 -04:00
Christian b301e8e4c1 Change type of connection queue to a concurrent linked queue. Much more efficient, hopefully. Closes #189 2013-03-10 01:25:36 -05:00
Christian f647929993 Merge branch 'master' of github.com:Uristqwerty/FML 2013-03-10 01:22:24 -05:00
Christian 984291cee9 Fix supertype parsing to handle null superclass (Hi Object!). Closes #160 2013-03-10 01:20:08 -05:00
Christian ac16845fc4 Fix demo mode crash. Closes #187 2013-03-10 01:15:16 -05:00
Christian 29edd242cd Fix coremods without a manifest crashing the game. Closes #181 2013-03-10 01:05:31 -05:00
Christian ca2d8bd834 Fix reflection helper: it needs to unmap the classname to find the field maps. 2013-03-09 17:58:18 -05:00
Christian 2a779ec328 Try a different way of remapping the fields. Should work because it's userspace, not relauncher space 2013-03-09 17:36:31 -05:00
Christian 591e65fa1a Revert "Use the reobfuscation maps in the reflection helper for field lookups: should help some reflection cases with the deobf."
This reverts commit 485db6be2e.
2013-03-09 17:32:11 -05:00
Christian 485db6be2e Use the reobfuscation maps in the reflection helper for field lookups: should help some reflection cases with the deobf. 2013-03-09 17:19:48 -05:00
Christian 25f3fcad46 Fix up some relauncher stuff: the vanilla applet works now, as do other applets. Deobf data is resolveable for them too. 2013-03-09 15:25:58 -05:00
LexManos 6bf7c9878c Fixed srg name of minecraftDir for runtime deobf. 2013-03-09 11:52:40 -08:00
Christian 95d0ff18cd Fix runtime deobfuscation for remapped inner classes 2013-03-09 14:06:39 -05:00
LexManos 1642bad402 Fix Multi-part entity children ID issue, mobs with custom spawning must deal with child ids themselves. 2013-03-09 10:07:41 -08:00
Uristqwerty 179c504746 Simplify logic in tick start/end
Change the EnumSet equivalent of "A &= ~ new(~B)" to "A &= B".
This eliminates the need for one temporary object in a frequently called loop, and reduces the number of methods that need to be invoked.
2012-12-14 04:14:17 -05:00
163 changed files with 20978 additions and 17056 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;
@@ -130,6 +133,7 @@ public class FMLClientHandler implements IFMLSidedHandler
*/
public void beginMinecraftLoading(Minecraft minecraft)
{
client = minecraft;
if (minecraft.func_71355_q())
{
FMLLog.severe("DEMO MODE DETECTED, FML will not work. Finishing now.");
@@ -138,8 +142,6 @@ public class FMLClientHandler implements IFMLSidedHandler
}
loading = true;
client = minecraft;
ObfuscationReflectionHelper.detectObfuscation(World.class);
// TextureFXManager.instance().setClient(client);
FMLCommonHandler.instance().beginLoading(this);
new ModLoaderClientHelper(client);
@@ -172,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");
@@ -198,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;
}
@@ -238,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());
}
}
@@ -341,6 +351,7 @@ public class FMLClientHandler implements IFMLSidedHandler
else
{
entity = (Entity)(cls.getConstructor(World.class).newInstance(wc));
int offset = packet.entityId - entity.field_70157_k;
entity.field_70157_k = packet.entityId;
entity.func_70012_b(packet.scaledX, packet.scaledY, packet.scaledZ, packet.scaledYaw, packet.scaledPitch);
if (entity instanceof EntityLiving)
@@ -348,6 +359,14 @@ public class FMLClientHandler implements IFMLSidedHandler
((EntityLiving)entity).field_70759_as = packet.scaledHeadYaw;
}
Entity parts[] = entity.func_70021_al();
if (parts != null)
{
for (int j = 0; j < parts.length; j++)
{
parts[j].field_70157_k += offset;
}
}
}
entity.field_70118_ct = packet.rawX;
@@ -360,18 +379,6 @@ public class FMLClientHandler implements IFMLSidedHandler
((IThrowableEntity)entity).setThrower(thrower);
}
Entity parts[] = entity.func_70021_al();
if (parts != null)
{
int i = packet.entityId - entity.field_70157_k;
for (int j = 0; j < parts.length; j++)
{
parts[j].field_70157_k += i;
}
}
if (packet.metadata != null)
{
entity.func_70096_w().func_75687_a((List)packet.metadata);
@@ -532,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;
}
/**
+12 -1
View File
@@ -330,6 +330,8 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr
}
/**
* Called client side to receive a custom payload for this mod
*
* NOTE: this method is not provided in Risugami's implementation of BaseMod!
*
* @param packet
*/
@@ -356,7 +358,9 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr
return false;
}
/*
* NOTE: this method is not provided in Risugami's implementation of BaseMod!
*/
@Override
public void serverConnect(NetHandler handler) {
@@ -368,6 +372,9 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr
}
/*
* NOTE: this method is not provided in Risugami's implementation of BaseMod!
*/
@Override
public void serverDisconnect() {
@@ -411,6 +418,8 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr
}
/**
* Called when a new client logs in.
*
* NOTE: this method is not provided in Risugami's implementation of BaseMod!
*
* @param player
*/
@@ -421,6 +430,8 @@ public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseModPr
/**
* Called when a client logs out of the server.
*
* NOTE: this method is not provided in Risugami's implementation of BaseMod!
*/
@Override
public void onClientLogout(INetworkManager mgr)
@@ -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;
@@ -115,7 +116,7 @@ public class FMLCommonHandler
for (IScheduledTickHandler ticker : scheduledTicks)
{
EnumSet<TickType> ticksToRun = EnumSet.copyOf(Objects.firstNonNull(ticker.ticks(), EnumSet.noneOf(TickType.class)));
ticksToRun.removeAll(EnumSet.complementOf(ticks));
ticksToRun.retainAll(ticks);
if (!ticksToRun.isEmpty())
{
ticker.tickStart(ticksToRun, data);
@@ -134,7 +135,7 @@ public class FMLCommonHandler
for (IScheduledTickHandler ticker : scheduledTicks)
{
EnumSet<TickType> ticksToRun = EnumSet.copyOf(Objects.firstNonNull(ticker.ticks(), EnumSet.noneOf(TickType.class)));
ticksToRun.removeAll(EnumSet.complementOf(ticks));
ticksToRun.retainAll(ticks);
if (!ticksToRun.isEmpty())
{
ticker.tickEnd(ticksToRun, data);
@@ -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()));
}
}
+63 -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()
@@ -571,6 +581,11 @@ public class Loader
public String getCrashInformation()
{
// Handle being called before we've begun setup
if (modController == null)
{
return "";
}
StringBuilder ret = new StringBuilder();
List<String> branding = FMLCommonHandler.instance().getBrandings();
@@ -674,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");
}
@@ -721,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)
{
@@ -734,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()
@@ -779,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)
@@ -796,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)
{
@@ -805,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();
}
@@ -15,6 +15,7 @@ package cpw.mods.fml.common;
import java.util.Arrays;
import java.util.logging.Level;
import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper;
import cpw.mods.fml.relauncher.ReflectionHelper;
import cpw.mods.fml.relauncher.ReflectionHelper.UnableToAccessFieldException;
import cpw.mods.fml.relauncher.ReflectionHelper.UnableToFindFieldException;
@@ -27,8 +28,6 @@ import cpw.mods.fml.relauncher.ReflectionHelper.UnableToFindFieldException;
*/
public class ObfuscationReflectionHelper
{
public static boolean obfuscation;
@SuppressWarnings("unchecked")
public static <T, E> T getPrivateValue(Class<? super E> classToAccess, E instance, int fieldIndex)
{
@@ -43,12 +42,23 @@ public class ObfuscationReflectionHelper
}
}
public static String[] remapFieldNames(String className, String... fieldNames)
{
String internalClassName = FMLDeobfuscatingRemapper.INSTANCE.unmap(className.replace('.', '/'));
String[] mappedNames = new String[fieldNames.length];
int i = 0;
for (String fName : fieldNames)
{
mappedNames[i++] = FMLDeobfuscatingRemapper.INSTANCE.mapFieldName(internalClassName, fName, null);
}
return mappedNames;
}
@SuppressWarnings("unchecked")
public static <T, E> T getPrivateValue(Class<? super E> classToAccess, E instance, String... fieldNames)
{
try
{
return ReflectionHelper.getPrivateValue(classToAccess, instance, fieldNames);
return ReflectionHelper.getPrivateValue(classToAccess, instance, remapFieldNames(classToAccess.getName(),fieldNames));
}
catch (UnableToFindFieldException e)
{
@@ -91,7 +101,7 @@ public class ObfuscationReflectionHelper
{
try
{
ReflectionHelper.setPrivateValue(classToAccess, instance, value, fieldNames);
ReflectionHelper.setPrivateValue(classToAccess, instance, value, remapFieldNames(classToAccess.getName(), fieldNames));
}
catch (UnableToFindFieldException e)
{
@@ -104,13 +114,4 @@ public class ObfuscationReflectionHelper
throw e;
}
}
/**
*
*/
public static void detectObfuscation(Class<?> clazz)
{
obfuscation = !clazz.getSimpleName().equals("World");
}
}
+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
{
@@ -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
*/
@@ -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());
}
}
@@ -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
*/
@@ -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")
@@ -161,6 +164,10 @@ public class AccessTransformer implements IClassTransformer
if (bytes == null) { return null; }
boolean makeAllPublic = FMLDeobfuscatingRemapper.INSTANCE.isRemappedClass(name);
if (DEBUG)
{
FMLRelaunchLog.fine("Considering all methods and fields on %s (%s): %b\n", name, transformedName, makeAllPublic);
}
if (!makeAllPublic && !modifiers.containsKey(name)) { return bytes; }
ClassNode classNode = new ClassNode();
@@ -183,8 +190,12 @@ public class AccessTransformer implements IClassTransformer
m = new Modifier();
m.targetAccess = ACC_PUBLIC;
m.name = "*";
m.desc = "";
m.desc = "<dummy>";
modifiers.put(name,m);
if (DEBUG)
{
System.out.printf("Injected all public modifiers for %s (%s)\n", name, transformedName);
}
}
Collection<Modifier> mods = modifiers.get(name);
@@ -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,21 +24,27 @@ 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;
import com.google.common.base.CharMatcher;
import com.google.common.base.Charsets;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.collect.BiMap;
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;
@@ -47,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();
@@ -61,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()
{
@@ -69,16 +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);
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();
@@ -123,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)
@@ -139,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)
@@ -178,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
@@ -189,18 +282,29 @@ public class FMLDeobfuscatingRemapper extends Remapper {
return typeName;
}
String result = classNameBiMap.containsKey(typeName) ? classNameBiMap.get(typeName) : mcpNameBiMap.containsKey(typeName) ? mcpNameBiMap.get(typeName) : typeName;
int dollarIdx = typeName.indexOf('$');
String realType = dollarIdx > -1 ? typeName.substring(0, dollarIdx) : typeName;
String subType = dollarIdx > -1 ? typeName.substring(dollarIdx+1) : "";
String result = classNameBiMap.containsKey(realType) ? classNameBiMap.get(realType) : mcpNameBiMap.containsKey(realType) ? mcpNameBiMap.get(realType) : realType;
result = dollarIdx > -1 ? result+"$"+subType : result;
// System.out.printf("Mapping %s=>%s\n",typeName,result);
return result;
}
public String unmap(String typeName)
{
if (classNameBiMap == null)
if (classNameBiMap == null || classNameBiMap.isEmpty())
{
return typeName;
}
String result = classNameBiMap.containsValue(typeName) ? classNameBiMap.inverse().get(typeName) : mcpNameBiMap.containsValue(typeName) ? mcpNameBiMap.inverse().get(typeName) : typeName;
int dollarIdx = typeName.indexOf('$');
String realType = dollarIdx > -1 ? typeName.substring(0, dollarIdx) : typeName;
String subType = dollarIdx > -1 ? typeName.substring(dollarIdx+1) : "";
String result = classNameBiMap.containsValue(realType) ? classNameBiMap.inverse().get(realType) : mcpNameBiMap.containsValue(realType) ? mcpNameBiMap.inverse().get(realType) : realType;
result = dollarIdx > -1 ? result+"$"+subType : result;
// System.out.printf("Unmapping %s=>%s\n",typeName,result);
return result;
}
@@ -261,16 +365,24 @@ public class FMLDeobfuscatingRemapper extends Remapper {
}
public void mergeSuperMaps(String name, String superName, String[] interfaces)
{
// System.out.printf("Computing super maps for %s: %s %s\n", name, superName, Arrays.asList(interfaces));
if (classNameBiMap == null || classNameBiMap.isEmpty())
{
return;
}
// Skip Object
if (Strings.isNullOrEmpty(superName))
{
return;
}
List<String> allParents = ImmutableList.<String>builder().add(superName).addAll(Arrays.asList(interfaces)).build();
// generate maps for all parent objects
for (String parentThing : allParents)
{
if (superName != null && classNameBiMap.containsKey(superName) && !methodNameMaps.containsKey(superName))
if (!methodNameMaps.containsKey(parentThing))
{
findAndMergeSuperMaps(superName);
findAndMergeSuperMaps(parentThing);
}
}
Map<String, String> methodMap = Maps.<String,String>newHashMap();
@@ -296,5 +408,11 @@ public class FMLDeobfuscatingRemapper extends Remapper {
}
methodNameMaps.put(name, ImmutableMap.copyOf(methodMap));
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())
{
@@ -25,6 +25,7 @@ import org.objectweb.asm.ClassReader;
import org.objectweb.asm.Type;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import cpw.mods.fml.common.FMLLog;
@@ -64,7 +65,7 @@ public class ASMModParser
{
this.asmType = Type.getObjectType(typeQName);
this.classVersion = classVersion;
this.asmSuperType = Type.getObjectType(superClassQName);
this.asmSuperType = !Strings.isNullOrEmpty(superClassQName) ? Type.getObjectType(superClassQName) : null;
}
public void startClassAnnotation(String annotationName)
@@ -5,7 +5,7 @@
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
*
* Contributors:
* cpw - implementation
*/
@@ -62,6 +62,7 @@ public class FMLInterModComms {
public void applyModContainer(ModContainer activeContainer)
{
this.activeContainer = activeContainer;
this.currentList = null;
FMLLog.finest("Attempting to deliver %d IMC messages to mod %s", modMessages.get(activeContainer.getModId()).size(), activeContainer.getModId());
}
@@ -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,10 +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>();
@@ -49,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");
@@ -71,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)
{
@@ -106,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();
@@ -122,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());
}
}
}
@@ -132,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
@@ -148,6 +147,7 @@ public class RelaunchLibraryManager
return;
}
libraries = new ArrayList<ILibrarySet>();
for (ILibrarySet lib : libraries)
{
for (int i=0; i<lib.getLibraries().length; i++)
@@ -212,7 +212,7 @@ public class RelaunchLibraryManager
try
{
actualClassLoader.addURL(libFile.toURI().toURL());
classLoader.addURL(libFile.toURI().toURL());
loadedLibraries.add(libName);
}
catch (MalformedURLException e)
@@ -267,19 +267,21 @@ 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>();
data.put("mcLocation", mcDir);
data.put("coremodList", loadPlugins);
data.put("runtimeDeobfuscationEnabled", !deobfuscatedEnvironment);
for (IFMLLoadingPlugin plugin : loadPlugins)
{
downloadMonitor.updateProgressString("Running coremod plugin %s", plugin.getClass().getSimpleName());
@@ -290,9 +292,11 @@ 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("classLoader", actualClassLoader);
callData.put("mcLocation", mcDir);
callData.put("classLoader", classLoader);
callData.put("coremodLocation", pluginLocations.get(plugin));
callData.put("deobfuscationFileName", FMLInjectionData.debfuscationDataName());
call.injectData(callData);
call.call();
@@ -313,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");
@@ -329,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);
@@ -352,6 +356,11 @@ public class RelaunchLibraryManager
try
{
jar = new JarFile(coreMod);
if (jar.getManifest() == null)
{
FMLRelaunchLog.warning("Found an un-manifested jar file in the coremods folder : %s, it will be ignored.", coreMod.getName());
continue;
}
mfAttributes = jar.getManifest().getMainAttributes();
}
catch (IOException ioe)
@@ -398,6 +407,25 @@ public class RelaunchLibraryManager
downloadMonitor.updateProgressString("Loading coremod %s", coreMod.getName());
classLoader.addTransformerExclusion(fmlCorePlugin);
Class<?> coreModClass = Class.forName(fmlCorePlugin, true, classLoader);
MCVersion requiredMCVersion = coreModClass.getAnnotation(IFMLLoadingPlugin.MCVersion.class);
String version = "";
if (requiredMCVersion == null)
{
FMLRelaunchLog.log(Level.WARNING, "The coremod %s does not have a MCVersion annotation, it may cause issues with this version of Minecraft", fmlCorePlugin);
}
else
{
version = requiredMCVersion.value();
}
if (!"".equals(version) && !FMLInjectionData.mccversion.equals(version))
{
FMLRelaunchLog.log(Level.SEVERE, "The coremod %s is requesting minecraft version %s and minecraft is %s. It will be ignored.", fmlCorePlugin, version, FMLInjectionData.mccversion);
continue;
}
else if (!"".equals(version))
{
FMLRelaunchLog.log(Level.FINE, "The coremod %s requested minecraft version %s and minecraft is %s. It will be loaded.", fmlCorePlugin, version, FMLInjectionData.mccversion);
}
TransformerExclusions trExclusions = coreModClass.getAnnotation(IFMLLoadingPlugin.TransformerExclusions.class);
if (trExclusions!=null)
{
@@ -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;
}
}
@@ -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,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
{
@@ -110,16 +114,20 @@ public class FMLRelaunchLog
super.reset();
currentMessage.append(record.replace(FMLLogFormatter.LINE_SEPARATOR, "\n"));
if (currentMessage.lastIndexOf("\n")>=0)
// Are we longer than just the line separator?
int lastIdx = -1;
int idx = currentMessage.indexOf("\n",lastIdx+1);
while (idx >= 0)
{
// Are we longer than just the line separator?
if (currentMessage.length()>1)
{
// Trim the line separator
currentMessage.setLength(currentMessage.length()-1);
log.log(Level.INFO, currentMessage.toString());
}
log.log(Level.INFO, currentMessage.substring(lastIdx+1,idx));
lastIdx = idx;
idx = currentMessage.indexOf("\n",lastIdx+1);
}
if (lastIdx >= 0)
{
String rem = currentMessage.substring(lastIdx+1);
currentMessage.setLength(0);
currentMessage.append(rem);
}
}
}
@@ -142,6 +150,8 @@ public class FMLRelaunchLog
private static FMLLogFormatter formatter;
static String logFileNamePattern;
private FMLRelaunchLog()
{
}
@@ -155,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);
@@ -168,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 {
@@ -176,8 +187,9 @@ public class FMLRelaunchLog
}
};
}
catch (Exception e)
catch (Throwable t)
{
throw Throwables.propagate(t);
}
resetLoggingHandlers();
@@ -1,329 +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", "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);
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);
appletClass = ReflectionHelper.getClass(classLoader, "net.minecraft.client.MinecraftApplet");
if (minecraftApplet.getClass().getClassLoader() == classLoader)
{
if (popupWindow != null)
{
popupWindow.setVisible(false);
popupWindow.dispose();
}
try
{
newApplet = 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
{
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);
}
@@ -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
*/
@@ -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
@@ -87,4 +88,18 @@ public interface IFMLLoadingPlugin
{
public String[] value() default "";
}
/**
* Use this to target a specific minecraft version for your coremod. It will refuse to load with an error if
* minecraft is not this exact version.
*
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MCVersion
{
public String value() default "";
}
}
@@ -1,395 +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"));
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, 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)
{
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 dan@morrione.net
* 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;
}
@@ -82,7 +82,6 @@ public class FMLServerHandler implements IFMLSidedHandler
public void beginServerLoading(MinecraftServer minecraftServer)
{
server = minecraftServer;
ObfuscationReflectionHelper.detectObfuscation(World.class);
Loader.instance().loadMods();
}
+44 -41
View File
@@ -1,73 +1,76 @@
#Main FML Access Transformer configuration file
# TileEntity addMapping
public aqj.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 bfy.g #FD:RenderEngine/field_78366_k #texturePack
#public bge.g #FD:RenderEngine/field_78366_k #texturePack # -- MISSING MAPPING
# RenderManager
public bgs.q #FD:RenderManager/field_78729_o #renderers
public bfx.q #FD:RenderManager/field_78729_o #renderers
# RenderBlocks - everything
public bfz.* #FD:RenderBlocks/*
public bfz.*() #MD:RenderBlocks/*
public bfd.* #FD:RenderBlocks/*
public bfd.*() #MD:RenderBlocks/*
#RenderPlayer
public-f bhn.h #FD:RenderPlayer/field_77110_j #armorlist
#public-f bht.h #FD:RenderPlayer/field_77110_j #armorlist # -- MISSING MAPPING
#RenderBiped
public-f bha.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 bix.m #FD:TileEntityRenderer/field_76966_m
public bip.m #FD:TileEntityRenderer/field_76966_m
# CraftingManager - make the add recipe methods public
public ye.a(Lwg;[Ljava/lang/Object;)Lyh; #MD:CraftingManager/func_92103_a
public ye.b(Lwg;[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 oi #CL:EntityAITaskEntry
public pq #CL:EntityAITaskEntry
# EntityAITasks
public oh.a #FD:EntityAITasks/field_75782_a #taskList
public pp.a #FD:EntityAITasks/field_75782_a #taskList
# BlockChest
public alh.m(Lzv;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 ou.a(Lzv;III)Z #MD:EntityAIOcelotSit/func_75398_a #nearestSittableBlock
protected ou.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 qb.d #FD:EntityAnimal/field_70881_d #inLove
public rl.bp #FD:EntityAnimal/field_70881_d #inLove
# WorldType
public aaf.<init>(ILjava/lang/String;)V #MD:WorldType/<init>(ILjava/lang/String;)
public aaf.<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 ahj #CL:ComponentVillage
public aje #CL:ComponentVillage
# EntityVillager - minmax lists
public sg.a(Lzl;ILjava/util/Random;F)V #MD:EntityVillager/func_70948_a #addBuy
public sg.b(Lzl;ILjava/util/Random;F)V #MD:EntityVillager/func_70949_b #addSell
public sg.bP #FD:EntityVillager/field_70958_bB
public sg.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 azc #CL:GuiButtonMerchant
public axn #CL:GuiButtonMerchant
protected awe.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
sk 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
aou 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
we 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.42",
"mcversion": "1.5",
"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
+382 -150
View File
File diff suppressed because it is too large. Load diff
+93 -61
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_
@@ -666,7 +667,6 @@ net/minecraft/src/BlockDirectional.<init>(ILnet/minecraft/src/Material;)V=|p_i39
net/minecraft/src/BlockDirectional.func_72217_d(I)I=|p_72217_0_
net/minecraft/src/BlockDirt.<init>(I)V=|p_i9052_1_
net/minecraft/src/BlockDispenser.<init>(I)V=|p_i3938_1_
net/minecraft/src/BlockDispenser.func_100001_j_(I)Lnet/minecraft/src/EnumFacing;=|p_100001_0_
net/minecraft/src/BlockDispenser.func_100009_j_(I)Lnet/minecraft/src/EnumFacing;=|p_100009_0_
net/minecraft/src/BlockDispenser.func_71847_b(Lnet/minecraft/src/World;IIILjava/util/Random;)V=|p_71847_1_,p_71847_2_,p_71847_3_,p_71847_4_,p_71847_5_
net/minecraft/src/BlockDispenser.func_71852_a(Lnet/minecraft/src/World;IIIII)V=|p_71852_1_,p_71852_2_,p_71852_3_,p_71852_4_,p_71852_5_,p_71852_6_
@@ -868,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_
@@ -1559,6 +1560,12 @@ net/minecraft/src/CallableChunkPosHash.<init>(Lnet/minecraft/src/MapGenStructure
net/minecraft/src/CallableClientMemoryStats.<init>(Lnet/minecraft/client/Minecraft;)V=|p_i5000_1_
net/minecraft/src/CallableClientProfiler.<init>(Lnet/minecraft/client/Minecraft;)V=|p_i3017_1_
net/minecraft/src/CallableCrashMemoryReport.<init>(Lnet/minecraft/src/CrashReport;)V=|p_i6000_1_
net/minecraft/src/CallableEffectAmplifier.<init>(Lnet/minecraft/src/EntityLiving;Lnet/minecraft/src/PotionEffect;)V=|p_i22006_1_,p_i22006_2_
net/minecraft/src/CallableEffectDuration.<init>(Lnet/minecraft/src/EntityLiving;Lnet/minecraft/src/PotionEffect;)V=|p_i22005_1_,p_i22005_2_
net/minecraft/src/CallableEffectID.<init>(Lnet/minecraft/src/EntityLiving;Lnet/minecraft/src/PotionEffect;)V=|p_i22004_1_,p_i22004_2_
net/minecraft/src/CallableEffectIsAmbient.<init>(Lnet/minecraft/src/EntityLiving;Lnet/minecraft/src/PotionEffect;)V=|p_i22008_1_,p_i22008_2_
net/minecraft/src/CallableEffectIsSplash.<init>(Lnet/minecraft/src/EntityLiving;Lnet/minecraft/src/PotionEffect;)V=|p_i22007_1_,p_i22007_2_
net/minecraft/src/CallableEffectName.<init>(Lnet/minecraft/src/EntityLiving;Lnet/minecraft/src/PotionEffect;)V=|p_i22003_1_,p_i22003_2_
net/minecraft/src/CallableEntityName.<init>(Lnet/minecraft/src/Entity;)V=|p_i10048_1_
net/minecraft/src/CallableEntityTracker.<init>(Lnet/minecraft/src/EntityTracker;I)V=|p_i10045_1_,p_i10045_2_
net/minecraft/src/CallableEntityType.<init>(Lnet/minecraft/src/Entity;)V=|p_i6811_1_
@@ -1656,7 +1663,7 @@ net/minecraft/src/Chunk.func_76627_f(III)V=|p_76627_1_,p_76627_2_,p_76627_3_
net/minecraft/src/Chunk.func_76628_c(III)I=|p_76628_1_,p_76628_2_,p_76628_3_
net/minecraft/src/Chunk.func_76629_c(IIII)I=|p_76629_1_,p_76629_2_,p_76629_3_,p_76629_4_
net/minecraft/src/Chunk.func_76633_a(Lnet/minecraft/src/EnumSkyBlock;IIII)V=|p_76633_1_,p_76633_2_,p_76633_3_,p_76633_4_,p_76633_5_
net/minecraft/src/ChunkCache.<init>(Lnet/minecraft/src/World;IIIIII)V=|p_i3740_1_,p_i3740_2_,p_i3740_3_,p_i3740_4_,p_i3740_5_,p_i3740_6_,p_i3740_7_
net/minecraft/src/ChunkCache.<init>(Lnet/minecraft/src/World;IIIIIII)V=|p_i22009_1_,p_i22009_2_,p_i22009_3_,p_i22009_4_,p_i22009_5_,p_i22009_6_,p_i22009_7_,p_i22009_8_
net/minecraft/src/ChunkCache.func_72796_p(III)Lnet/minecraft/src/TileEntity;=|p_72796_1_,p_72796_2_,p_72796_3_
net/minecraft/src/ChunkCache.func_72797_t(III)Z=|p_72797_1_,p_72797_2_,p_72797_3_
net/minecraft/src/ChunkCache.func_72798_a(III)I=|p_72798_1_,p_72798_2_,p_72798_3_
@@ -3869,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_
@@ -3888,6 +3895,7 @@ net/minecraft/src/GuiConnecting.func_74257_b(Lnet/minecraft/src/GuiConnecting;)Z
net/minecraft/src/GuiConnecting.func_98096_h(Lnet/minecraft/src/GuiConnecting;)Lnet/minecraft/client/Minecraft;=|p_98096_0_
net/minecraft/src/GuiConnecting.func_98097_e(Lnet/minecraft/src/GuiConnecting;)Lnet/minecraft/src/GuiScreen;=|p_98097_0_
net/minecraft/src/GuiContainer.<init>(Lnet/minecraft/src/Container;)V=|p_i3079_1_
net/minecraft/src/GuiContainer.func_102021_a(Ljava/util/List;II)V=|p_102021_1_,p_102021_2_,p_102021_3_
net/minecraft/src/GuiContainer.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiContainer.func_73864_a(III)V=|p_73864_1_,p_73864_2_,p_73864_3_
net/minecraft/src/GuiContainer.func_73869_a(CI)V=|p_73869_1_,p_73869_2_
@@ -4019,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_
@@ -4030,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_
@@ -4143,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_
@@ -4167,7 +4186,8 @@ net/minecraft/src/GuiScreenEditOnlineWorld.func_73863_a(IIF)V=|p_73863_1_,p_7386
net/minecraft/src/GuiScreenEditOnlineWorld.func_73864_a(III)V=|p_73864_1_,p_73864_2_,p_73864_3_
net/minecraft/src/GuiScreenEditOnlineWorld.func_73869_a(CI)V=|p_73869_1_,p_73869_2_
net/minecraft/src/GuiScreenEditOnlineWorld.func_73875_a(Lnet/minecraft/src/GuiButton;)V=|p_73875_1_
net/minecraft/src/GuiScreenInvite.<init>(Lnet/minecraft/src/GuiScreen;Lnet/minecraft/src/GuiScreen;Lnet/minecraft/src/McoServer;)V=|p_i10015_1_,p_i10015_2_,p_i10015_3_
net/minecraft/src/GuiScreenInvite.<init>(Lnet/minecraft/src/GuiScreen;Lnet/minecraft/src/GuiScreenConfigureWorld;Lnet/minecraft/src/McoServer;)V=|p_i22002_1_,p_i22002_2_,p_i22002_3_
net/minecraft/src/GuiScreenInvite.func_101015_a(Ljava/lang/String;)V=|p_101015_1_
net/minecraft/src/GuiScreenInvite.func_73863_a(IIF)V=|p_73863_1_,p_73863_2_,p_73863_3_
net/minecraft/src/GuiScreenInvite.func_73864_a(III)V=|p_73864_1_,p_73864_2_,p_73864_3_
net/minecraft/src/GuiScreenInvite.func_73869_a(CI)V=|p_73869_1_,p_73869_2_
@@ -4179,38 +4199,47 @@ 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_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_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_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_
net/minecraft/src/GuiScreenOnlineServers.func_96159_a(I)V=|p_96159_1_
net/minecraft/src/GuiScreenOnlineServers.func_96161_f(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/GuiButton;=|p_96161_0_
net/minecraft/src/GuiScreenOnlineServers.func_96165_a(Ljava/lang/String;II)V=|p_96165_1_,p_96165_2_,p_96165_3_
net/minecraft/src/GuiScreenOnlineServers.func_96168_c(II)V=|p_96168_1_,p_96168_2_
net/minecraft/src/GuiScreenOnlineServers.func_96174_a(Lnet/minecraft/src/McoServer;)V=java/io/IOException|p_96174_1_
net/minecraft/src/GuiScreenOnlineServers.func_96175_b(II)V=|p_96175_1_,p_96175_2_
net/minecraft/src/GuiScreenOnlineServers.func_96177_a(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/client/Minecraft;=|p_96177_0_
net/minecraft/src/GuiScreenOnlineServers.func_96179_a(Lnet/minecraft/src/GuiScreenOnlineServers;Lnet/minecraft/src/McoServer;)V=java/io/IOException|p_96179_0_,p_96179_1_
net/minecraft/src/GuiScreenOnlineServers.func_96182_l(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_96182_0_
net/minecraft/src/GuiScreenOnlineServers.func_98070_a(Lnet/minecraft/src/GuiScreenOnlineServers;II)V=|p_98070_0_,p_98070_1_,p_98070_2_
net/minecraft/src/GuiScreenOnlineServers.func_98071_n(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/client/Minecraft;=|p_98071_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_98077_c(Lnet/minecraft/src/GuiScreenOnlineServers;II)V=|p_98077_0_,p_98077_1_,p_98077_2_
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_98083_b(Lnet/minecraft/src/GuiScreenOnlineServers;II)V=|p_98083_0_,p_98083_1_,p_98083_2_
net/minecraft/src/GuiScreenOnlineServers.func_98084_i(Lnet/minecraft/src/GuiScreenOnlineServers;)Lnet/minecraft/src/FontRenderer;=|p_98084_0_
net/minecraft/src/GuiScreenOnlineServers.func_98085_a(Lnet/minecraft/src/GuiScreenOnlineServers;Ljava/lang/String;)Ljava/lang/String;=|p_98085_0_,p_98085_1_
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_98088_b(II)V=|p_98088_1_,p_98088_2_
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_
@@ -4218,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_
@@ -4288,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_
@@ -4427,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|
@@ -4927,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_
@@ -5050,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|
@@ -5058,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_
@@ -6189,6 +6214,7 @@ net/minecraft/src/RenderBlaze.func_76986_a(Lnet/minecraft/src/Entity;DDDFF)V=|p_
net/minecraft/src/RenderBlaze.func_77031_a(Lnet/minecraft/src/EntityLiving;DDDFF)V=|p_77031_1_,p_77031_2_,p_77031_4_,p_77031_6_,p_77031_8_,p_77031_9_
net/minecraft/src/RenderBlaze.func_77067_a(Lnet/minecraft/src/EntityBlaze;DDDFF)V=|p_77067_1_,p_77067_2_,p_77067_4_,p_77067_6_,p_77067_8_,p_77067_9_
net/minecraft/src/RenderBlocks.<init>(Lnet/minecraft/src/IBlockAccess;)V=|p_i3187_1_
net/minecraft/src/RenderBlocks.func_102027_b(Lnet/minecraft/src/Block;IIIFFF)Z=|p_102027_1_,p_102027_2_,p_102027_3_,p_102027_4_,p_102027_5_,p_102027_6_,p_102027_7_
net/minecraft/src/RenderBlocks.func_78565_t(Lnet/minecraft/src/BlockStairs;III)Z=|p_78565_1_,p_78565_2_,p_78565_3_,p_78565_4_
net/minecraft/src/RenderBlocks.func_78566_o(Lnet/minecraft/src/Block;III)Z=|p_78566_1_,p_78566_2_,p_78566_3_,p_78566_4_
net/minecraft/src/RenderBlocks.func_78567_v(Lnet/minecraft/src/BlockEndPortalFrame;III)Z=|p_78567_1_,p_78567_2_,p_78567_3_,p_78567_4_
@@ -6584,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_
@@ -6594,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_
@@ -6695,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_
@@ -6788,7 +6812,6 @@ net/minecraft/src/ServerList.func_78857_a(II)V=|p_78857_1_,p_78857_2_
net/minecraft/src/ServerListenThread.<init>(Lnet/minecraft/src/NetworkListenThread;Ljava/net/InetAddress;I)V=java/io/IOException|p_i3384_1_,p_i3384_2_,p_i3384_3_
net/minecraft/src/ServerListenThread.func_71764_a(Lnet/minecraft/src/NetLoginHandler;)V=|p_71764_1_
net/minecraft/src/ServerListenThread.func_71769_a(Ljava/net/InetAddress;)V=|p_71769_1_
net/minecraft/src/ServerListenThread.func_71770_b(Ljava/net/InetAddress;)Z=|p_71770_0_
net/minecraft/src/ServerScoreboard.<init>(Lnet/minecraft/server/MinecraftServer;)V=|p_i10044_1_
net/minecraft/src/ServerScoreboard.func_96512_b(Ljava/lang/String;Lnet/minecraft/src/ScorePlayerTeam;)V=|p_96512_1_,p_96512_2_
net/minecraft/src/ServerScoreboard.func_96513_c(Lnet/minecraft/src/ScorePlayerTeam;)V=|p_96513_1_
@@ -7065,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_
@@ -7113,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_
@@ -7172,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_
@@ -7218,6 +7241,8 @@ net/minecraft/src/TileEntityBeacon.func_94041_b(ILnet/minecraft/src/ItemStack;)Z
net/minecraft/src/TileEntityBeacon.func_94047_a(Ljava/lang/String;)V=|p_94047_1_
net/minecraft/src/TileEntityBeaconRenderer.func_76894_a(Lnet/minecraft/src/TileEntity;DDDF)V=|p_76894_1_,p_76894_2_,p_76894_4_,p_76894_6_,p_76894_8_
net/minecraft/src/TileEntityBeaconRenderer.func_82398_a(Lnet/minecraft/src/TileEntityBeacon;DDDF)V=|p_82398_1_,p_82398_2_,p_82398_4_,p_82398_6_,p_82398_8_
net/minecraft/src/TileEntityBrewingStand.func_102007_a(ILnet/minecraft/src/ItemStack;I)Z=|p_102007_1_,p_102007_2_,p_102007_3_
net/minecraft/src/TileEntityBrewingStand.func_102008_b(ILnet/minecraft/src/ItemStack;I)Z=|p_102008_1_,p_102008_2_,p_102008_3_
net/minecraft/src/TileEntityBrewingStand.func_70298_a(II)Lnet/minecraft/src/ItemStack;=|p_70298_1_,p_70298_2_
net/minecraft/src/TileEntityBrewingStand.func_70299_a(ILnet/minecraft/src/ItemStack;)V=|p_70299_1_,p_70299_2_
net/minecraft/src/TileEntityBrewingStand.func_70300_a(Lnet/minecraft/src/EntityPlayer;)Z=|p_70300_1_
@@ -7228,8 +7253,7 @@ net/minecraft/src/TileEntityBrewingStand.func_70310_b(Lnet/minecraft/src/NBTTagC
net/minecraft/src/TileEntityBrewingStand.func_70352_b(ILnet/minecraft/src/ItemStack;)I=|p_70352_1_,p_70352_2_
net/minecraft/src/TileEntityBrewingStand.func_70354_c(I)V=|p_70354_1_
net/minecraft/src/TileEntityBrewingStand.func_94041_b(ILnet/minecraft/src/ItemStack;)Z=|p_94041_1_,p_94041_2_
net/minecraft/src/TileEntityBrewingStand.func_94127_c(I)I=|p_94127_1_
net/minecraft/src/TileEntityBrewingStand.func_94128_d(I)I=|p_94128_1_
net/minecraft/src/TileEntityBrewingStand.func_94128_d(I)[I=|p_94128_1_
net/minecraft/src/TileEntityBrewingStand.func_94131_a(Ljava/lang/String;)V=|p_94131_1_
net/minecraft/src/TileEntityChest.func_70298_a(II)Lnet/minecraft/src/ItemStack;=|p_70298_1_,p_70298_2_
net/minecraft/src/TileEntityChest.func_70299_a(ILnet/minecraft/src/ItemStack;)V=|p_70299_1_,p_70299_2_
@@ -7274,6 +7298,8 @@ net/minecraft/src/TileEntityEnderChest.func_70315_b(II)Z=|p_70315_1_,p_70315_2_
net/minecraft/src/TileEntityEnderChest.func_70365_a(Lnet/minecraft/src/EntityPlayer;)Z=|p_70365_1_
net/minecraft/src/TileEntityEnderChestRenderer.func_76894_a(Lnet/minecraft/src/TileEntity;DDDF)V=|p_76894_1_,p_76894_2_,p_76894_4_,p_76894_6_,p_76894_8_
net/minecraft/src/TileEntityEnderChestRenderer.func_76899_a(Lnet/minecraft/src/TileEntityEnderChest;DDDF)V=|p_76899_1_,p_76899_2_,p_76899_4_,p_76899_6_,p_76899_8_
net/minecraft/src/TileEntityFurnace.func_102007_a(ILnet/minecraft/src/ItemStack;I)Z=|p_102007_1_,p_102007_2_,p_102007_3_
net/minecraft/src/TileEntityFurnace.func_102008_b(ILnet/minecraft/src/ItemStack;I)Z=|p_102008_1_,p_102008_2_,p_102008_3_
net/minecraft/src/TileEntityFurnace.func_70298_a(II)Lnet/minecraft/src/ItemStack;=|p_70298_1_,p_70298_2_
net/minecraft/src/TileEntityFurnace.func_70299_a(ILnet/minecraft/src/ItemStack;)V=|p_70299_1_,p_70299_2_
net/minecraft/src/TileEntityFurnace.func_70300_a(Lnet/minecraft/src/EntityPlayer;)Z=|p_70300_1_
@@ -7286,9 +7312,12 @@ net/minecraft/src/TileEntityFurnace.func_70398_a(Lnet/minecraft/src/ItemStack;)I
net/minecraft/src/TileEntityFurnace.func_70401_b(Lnet/minecraft/src/ItemStack;)Z=|p_70401_0_
net/minecraft/src/TileEntityFurnace.func_70403_d(I)I=|p_70403_1_
net/minecraft/src/TileEntityFurnace.func_94041_b(ILnet/minecraft/src/ItemStack;)Z=|p_94041_1_,p_94041_2_
net/minecraft/src/TileEntityFurnace.func_94127_c(I)I=|p_94127_1_
net/minecraft/src/TileEntityFurnace.func_94128_d(I)I=|p_94128_1_
net/minecraft/src/TileEntityFurnace.func_94128_d(I)[I=|p_94128_1_
net/minecraft/src/TileEntityFurnace.func_94129_a(Ljava/lang/String;)V=|p_94129_1_
net/minecraft/src/TileEntityHopper.func_102012_a(Lnet/minecraft/src/Hopper;Lnet/minecraft/src/IInventory;II)Z=|p_102012_0_,p_102012_1_,p_102012_2_,p_102012_3_
net/minecraft/src/TileEntityHopper.func_102013_b(Lnet/minecraft/src/IInventory;Lnet/minecraft/src/ItemStack;II)Z=|p_102013_0_,p_102013_1_,p_102013_2_,p_102013_3_
net/minecraft/src/TileEntityHopper.func_102014_c(Lnet/minecraft/src/IInventory;Lnet/minecraft/src/ItemStack;II)Lnet/minecraft/src/ItemStack;=|p_102014_0_,p_102014_1_,p_102014_2_,p_102014_3_
net/minecraft/src/TileEntityHopper.func_102015_a(Lnet/minecraft/src/IInventory;Lnet/minecraft/src/ItemStack;II)Z=|p_102015_0_,p_102015_1_,p_102015_2_,p_102015_3_
net/minecraft/src/TileEntityHopper.func_70298_a(II)Lnet/minecraft/src/ItemStack;=|p_70298_1_,p_70298_2_
net/minecraft/src/TileEntityHopper.func_70299_a(ILnet/minecraft/src/ItemStack;)V=|p_70299_1_,p_70299_2_
net/minecraft/src/TileEntityHopper.func_70300_a(Lnet/minecraft/src/EntityPlayer;)Z=|p_70300_1_
@@ -7298,7 +7327,6 @@ net/minecraft/src/TileEntityHopper.func_70307_a(Lnet/minecraft/src/NBTTagCompoun
net/minecraft/src/TileEntityHopper.func_70310_b(Lnet/minecraft/src/NBTTagCompound;)V=|p_70310_1_
net/minecraft/src/TileEntityHopper.func_94041_b(ILnet/minecraft/src/ItemStack;)Z=|p_94041_1_,p_94041_2_
net/minecraft/src/TileEntityHopper.func_94114_a(Lnet/minecraft/src/ItemStack;Lnet/minecraft/src/ItemStack;)Z=|p_94114_1_,p_94114_2_
net/minecraft/src/TileEntityHopper.func_94115_a(Lnet/minecraft/src/IInventory;I)I=|p_94115_1_,p_94115_2_
net/minecraft/src/TileEntityHopper.func_94117_a(Lnet/minecraft/src/IInventory;Lnet/minecraft/src/ItemStack;I)Lnet/minecraft/src/ItemStack;=|p_94117_1_,p_94117_2_,p_94117_3_
net/minecraft/src/TileEntityHopper.func_96114_a(Lnet/minecraft/src/IInventory;Lnet/minecraft/src/EntityItem;)Z=|p_96114_0_,p_96114_1_
net/minecraft/src/TileEntityHopper.func_96115_a(Ljava/lang/String;)V=|p_96115_1_
@@ -7360,6 +7388,11 @@ net/minecraft/src/TileEntitySpecialRenderer.func_82392_a(Ljava/lang/String;Ljava
net/minecraft/src/Timer.<init>(F)V=|p_i3005_1_
net/minecraft/src/TimerTaskMcoServerListUpdate.<init>(Lnet/minecraft/src/McoServerList;)V=|p_i11000_1_
net/minecraft/src/TimerTaskMcoServerListUpdate.<init>(Lnet/minecraft/src/McoServerList;Lnet/minecraft/src/McoServerListINNER1;)V=|p_i11001_1_,p_i11001_2_
net/minecraft/src/TimerTaskMcoServerListUpdate.func_101018_a(Ljava/util/List;)V=|p_101018_1_
net/minecraft/src/TimerTaskMcoServerListUpdateComparator.<init>(Lnet/minecraft/src/TimerTaskMcoServerListUpdate;Ljava/lang/String;)V=|p_i22000_1_,p_i22000_2_
net/minecraft/src/TimerTaskMcoServerListUpdateComparator.<init>(Lnet/minecraft/src/TimerTaskMcoServerListUpdate;Ljava/lang/String;Lnet/minecraft/src/McoServerListINNER1;)V=|p_i22001_1_,p_i22001_2_,p_i22001_3_
net/minecraft/src/TimerTaskMcoServerListUpdateComparator.compare(Ljava/lang/Object;Ljava/lang/Object;)I=|p_compare_1_,p_compare_2_
net/minecraft/src/TimerTaskMcoServerListUpdateComparator.func_102023_a(Lnet/minecraft/src/McoServer;Lnet/minecraft/src/McoServer;)I=|p_102023_1_,p_102023_2_
net/minecraft/src/Tuple.<init>(Ljava/lang/Object;Ljava/lang/Object;)V=|p_i3422_1_,p_i3422_2_
net/minecraft/src/ValueObject.func_96394_a(Ljava/lang/reflect/Field;)Z=|p_96394_0_
net/minecraft/src/ValueObjectList.func_98161_a(Ljava/lang/String;)Lnet/minecraft/src/ValueObjectList;=|p_98161_0_
@@ -7441,7 +7474,7 @@ net/minecraft/src/WeightedRandomMinecart.<init>(Lnet/minecraft/src/MobSpawnerBas
net/minecraft/src/WeightedRandomMinecart.<init>(Lnet/minecraft/src/MobSpawnerBaseLogic;Lnet/minecraft/src/NBTTagCompound;Ljava/lang/String;)V=|p_i11042_1_,p_i11042_2_,p_i11042_3_
net/minecraft/src/World.<init>(Lnet/minecraft/src/ISaveHandler;Ljava/lang/String;Lnet/minecraft/src/WorldProvider;Lnet/minecraft/src/WorldSettings;Lnet/minecraft/src/Profiler;Lnet/minecraft/src/ILogAgent;)V=|p_i11043_1_,p_i11043_2_,p_i11043_3_,p_i11043_4_,p_i11043_5_,p_i11043_6_
net/minecraft/src/World.<init>(Lnet/minecraft/src/ISaveHandler;Ljava/lang/String;Lnet/minecraft/src/WorldSettings;Lnet/minecraft/src/WorldProvider;Lnet/minecraft/src/Profiler;Lnet/minecraft/src/ILogAgent;)V=|p_i11044_1_,p_i11044_2_,p_i11044_3_,p_i11044_4_,p_i11044_5_,p_i11044_6_
net/minecraft/src/World.func_100002_v()I=|
net/minecraft/src/World.func_102026_a(Lnet/minecraft/src/Block;I)Z=|p_102026_1_,p_102026_2_
net/minecraft/src/World.func_72796_p(III)Lnet/minecraft/src/TileEntity;=|p_72796_1_,p_72796_2_,p_72796_3_
net/minecraft/src/World.func_72797_t(III)Z=|p_72797_1_,p_72797_2_,p_72797_3_
net/minecraft/src/World.func_72798_a(III)I=|p_72798_1_,p_72798_2_,p_72798_3_
@@ -7522,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_
@@ -7581,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_
@@ -7756,7 +7789,6 @@ net/minecraft/src/WorldManager.func_72710_a(III)V=|p_72710_1_,p_72710_2_,p_72710
net/minecraft/src/WorldManager.func_72711_b(III)V=|p_72711_1_,p_72711_2_,p_72711_3_
net/minecraft/src/WorldManager.func_82746_a(IIIII)V=|p_82746_1_,p_82746_2_,p_82746_3_,p_82746_4_,p_82746_5_
net/minecraft/src/WorldManager.func_85102_a(Lnet/minecraft/src/EntityPlayer;Ljava/lang/String;DDDFF)V=|p_85102_1_,p_85102_2_,p_85102_3_,p_85102_5_,p_85102_7_,p_85102_9_,p_85102_10_
net/minecraft/src/WorldProvider.func_100003_a(J)I=|p_100003_1_
net/minecraft/src/WorldProvider.func_76558_a(Lnet/minecraft/src/World;)V=|p_76558_1_
net/minecraft/src/WorldProvider.func_76559_b(J)I=|p_76559_1_
net/minecraft/src/WorldProvider.func_76560_a(FF)[F=|p_76560_1_,p_76560_2_
+14084 -13995
View File
File diff suppressed because it is too large. Load diff
+18 -12
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 = d39baadeeb124a29b2542d778713493f
MD5Server = 22223b1d00b72cc51fdb8b7cdd45f9c1
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 = 100000
ParamIndex = 20000
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 -jar %s -din=0 -rbr=0 -dgs=1 -asc=1 -log=WARN {indir} {outdir}
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
+396 -83
View File
@@ -1,4 +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.
@@ -183,12 +193,6 @@ func_70361_i,getRandomStackFromInventory,2,
func_70364_a,openChest,2,
func_70365_a,isUseableByPlayer,2,
func_70366_b,closeChest,2,
func_70382_c,getMobEntity,2,will create the entity from the internalID the first time it is accessed
func_70383_a,writeNBTTagsTo,2,
func_70384_a,getMobID,2,
func_70385_a,setMobID,2,
func_70386_b,anyPlayerInRange,2,Returns true if there is a player in range (using World.getClosestPlayer)
func_70387_f,updateDelay,2,Sets the delay before a new spawn (base delay of 200 + random number up to 600).
func_70397_c,getCookProgressScaled,2,Returns an integer between 0 and the passed value representing how close the current item is to being completely cooked
func_70398_a,getItemBurnTime,2,"Returns the number of ticks that the supplied fuel item will keep the furnace burning, or 0 if the item isn't fuel"
func_70399_k,smeltItem,2,Turn one item from the furnace source stack into the appropriate smelted item in the furnace result stack
@@ -235,14 +239,12 @@ func_70471_c,setCurrentRecipeIndex,2,
func_70485_a,setAssociatedChest,2,
func_70486_a,loadInventoryFromNBT,2,
func_70487_g,saveInventoryToNBT,2,
func_70490_h,isMinecartPowered,2,Is this minecart powered (Fuel > 0)
func_70491_i,getDamage,2,Gets the current amount of damage the minecart has taken. Decreases over time. The cart breaks when this is over 40.
func_70492_c,setDamage,2,Sets the current amount of damage the minecart has taken. Decreases over time. The cart breaks when this is over 40.
func_70493_k,getRollingDirection,2,Gets the rolling direction the cart rolls while being attacked. Can be 1 or -1.
func_70494_i,setRollingDirection,2,Sets the rolling direction the cart rolls while being attacked. Can be 1 or -1.
func_70496_j,getRollingAmplitude,2,Gets the rolling amplitude the cart rolls while being attacked.
func_70497_h,setRollingAmplitude,2,Sets the rolling amplitude the cart rolls while being attacked.
func_70498_d,setMinecartPowered,2,Set if this minecart is powered (Fuel > 0)
func_70515_d,explode,2,
func_70518_d,onValidSurface,2,checks to make sure painting can be placed there
func_70526_d,getXpValue,2,Returns the XP value of this XP orb.
@@ -254,7 +256,6 @@ func_70536_a,setParticleTextureIndex,2,Public method to set private field partic
func_70537_b,getFXLayer,2,
func_70538_b,setRBGColorF,2,
func_70539_a,renderParticle,2,
func_70540_h,getParticleTextureIndex,2,
func_70541_f,multipleParticleScaleBy,2,
func_70542_f,getGreenColorF,2,
func_70543_e,multiplyVelocity,2,
@@ -455,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."
@@ -470,7 +471,6 @@ func_70999_a,wakeUpPlayer,2,Wake up the player if they're sleeping.
func_71000_j,addMovementStat,2,"Adds a value to a movement statistic field - like run, walk, swin or climb."
func_71001_a,onItemPickup,2,"Called whenever an item is picked up from walking over it. Args: pickedUpEntity, stackSize"
func_71002_c,displayGUIEnchantment,2,
func_71003_h,isPVPEnabled,2,returns if pvp is enabled or not
func_71004_bE,respawnPlayer,2,
func_71005_bN,getInventoryEnderChest,2,Returns the InventoryEnderChest of this player.
func_71006_a,displayGUIDispenser,2,Displays the dipsenser GUI for the passed in dispenser entity. Args: TileEntityDispenser
@@ -638,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.
@@ -674,7 +674,6 @@ func_71364_i,setIngameNotInFocus,2,"Resets the player keystate, disables the ing
func_71365_K,screenshotListener,2,checks if keys are down
func_71366_a,displayDebugInfo,2,
func_71367_a,setServer,2,
func_71368_v,isDebugInfoEnabled,2,
func_71369_N,getGLMaximumTextureSize,2,Used in the usage snooper.
func_71370_a,resize,2,Called to resize the current screen.
func_71371_a,launchIntegratedServer,2,"Arguments: World foldername, World ingame name, WorldSettings"
@@ -802,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,
@@ -842,13 +840,13 @@ 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"
func_71862_a,randomDisplayTick,2,A randomly called display update to be able to add particles or other items for display
func_71863_a,onNeighborBlockChange,2,"Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are their own) Args: x, y, z, neighbor blockID"
func_71864_b,setUnlocalizedName,2,"Sets the unlocalized name of the block to the string passed as a parameter, prefixed by ""tile."""
func_71864_b,setUnlocalizedName,2,
func_71865_a,isProvidingWeakPower,2,"Returns true if the block is emitting indirect/weak redstone power on the specified side. If isBlockNormalCube returns true, standard redstone propagation rules will apply instead and this will not be called. 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_71866_a,onFallenUpon,2,Block's chance to react to an entity falling on it.
func_71867_k,onBlockDestroyedByExplosion,2,Called upon the block being destroyed by an explosion
@@ -895,7 +893,6 @@ func_71907_b,setTickRandomly,2,Sets whether this block type will receive random
func_71908_a,getPlayerRelativeBlockHardness,2,"Gets the hardness of block at the given coordinates in the given world, relative to the ability of the given EntityPlayer."
func_71910_a,quantityDroppedWithBonus,2,Returns the usual quantity dropped by the block plus a bonus of 1 to 'i' (inclusive).
func_71911_a_,getSelectedBoundingBoxFromPool,2,Returns the bounding box of the wired rectangular prism to render.
func_71912_p,setRequiresSelfNotify,2,Blocks with this attribute will not notify all near blocks when it's metadata change. The default behavior is always notify every neightbor block when anything changes.
func_71913_a,canCollideCheck,2,"Returns whether this block is collideable based on the arguments passed in Args: blockMetaData, unknownFlag"
func_71914_a,dropBlockAsItemWithChance,2,Drops the block items with a specified chance of dropping the specified items
func_71915_e,getMobilityFlag,2,"Returns the mobility information of the block, 0 = free, 1 = can't push but can move over, 2 = total immobility and stop pistons"
@@ -963,13 +960,10 @@ func_72172_n,notifyWireNeighborsOfNeighborChange,2,"Calls World.notifyBlocksOfNe
func_72173_e,isPowerProviderOrWire,2,"Returns true if redstone wire can connect to the specified block. Params: World, X, Y, Z, side (not a normal notch-side, this can be 0, 1, 2, 3 or -1)"
func_72176_l,glow,2,The redstone ore glows.
func_72177_n,sparkle,2,The redstone ore sparkles.
func_72179_a,isPoweredBlockRail,2,Return true if the blocks passed is a power related rail.
func_72180_d_,isRailBlockAt,2,"Returns true if the block at the coordinates of world passed is a valid rail block (current is rail, powered or detector)."
func_72181_a,refreshTrackShape,2,Completely recalculates the track shape based on neighboring tracks
func_72182_a,isNeighborRailPowered,2,"Powered minecart rail is conductive like wire, so check for powered neighbors"
func_72183_n,isPowered,2,Returns true if the block is power related rail.
func_72184_d,isRailBlock,2,"Return true if the parameter is a blockID for a valid rail block (current is rail, powered or detector)."
func_72185_a,isRailPassingPower,2,Returns true if the specified rail is passing power to its neighbor
func_72187_e,setStateIfMinecartInteractsWithRail,2,"Update the detector rail power state if a minecart enter, stays or leave the block."
func_72190_l,tryToFall,2,If there is space to fall below will start this block falling
func_72191_e_,canFallBelow,2,Checks to see if the sand can fall into the block below it
@@ -993,7 +987,7 @@ func_72211_e,getSmallestFlowDecay,2,"getSmallestFlowDecay(World world, intx, int
func_72215_l,setNotStationary,2,Changes the block ID to that of an updating fluid.
func_72216_n,isFlammable,2,Checks to see if the block is flammable.
func_72217_d,getDirection,2,Returns the orentation value from the specified metadata
func_72220_e,ignoreTick,2,
func_72220_e,getInputStrength,2,"Returns the signal strength at one input of the block. Args: world, X, Y, Z, side"
func_72224_c,isFenceGateOpen,2,Returns if the fence gate is open according to its metadata.
func_72225_b_,isBedOccupied,2,Return whether or not the bed is occupied.
func_72226_b,getNearestEmptyChunkCoordinates,2,Gets the nearest empty chunk coordinates for the player to wake up from a bed into.
@@ -1361,17 +1355,16 @@ func_72813_a,getLightValueExt,2,Get light value with flag
func_72819_i,getWeightedThunderStrength,2,
func_72820_D,getWorldTime,2,
func_72821_m,notifyBlockOfNeighborChange,2,"Notifies a block that one of its neighbor change to the specified type Args: x, y, z, blockID"
func_72822_b,setBlock,2,"Sets the block to the specified blockID at the block coordinates Args x, y, z, blockID"
func_72823_a,setItemData,2,"Assigns the given String id to the given MapDataBase using the MapStorage, removing any existing ones of the same id."
func_72824_f,getCloudColour,2,
func_72825_h,getTopSolidOrLiquidBlock,2,"Finds the highest block on the x, z coordinate that is solid and returns its y coord. Args x, z"
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,setBlockAndMetadataWithNotify,2,"Sets the block ID and metadata, then notifies neighboring blocks of the change Params: x, y, z, BlockID, Metadata"
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
@@ -1379,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
@@ -1394,14 +1387,12 @@ 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
func_72859_e,setBlockWithNotify,2,"Sets a block and notifies relevant systems with the block change Args: x, y, z, blockID"
func_72860_G,getSaveHandler,2,Returns this world's current save handler
func_72861_E,getSpawnPoint,2,Returns the coordinates of the spawn point
func_72862_i,markBlockForRenderUpdate2,2,"On the client, re-renders this block. On the server, does nothing. Appears to be redundant."
func_72863_F,getChunkProvider,2,gets the IChunkProvider this world uses.
func_72864_z,isBlockIndirectlyGettingPowered,2,"Used to see if one of the blocks next to you or your block is getting power from a neighboring block. Used by items like TNT or Doors so they don't have redstone going straight into them. Args: x, y, z"
func_72865_a,getPathEntityToEntity,2,
@@ -1410,17 +1401,15 @@ func_72867_j,getRainStrength,2,Not sure about this actually. Reverting this one
func_72868_a,addLoadedEntities,2,"adds entities to the loaded entities list, and loads thier skins."
func_72869_a,spawnParticle,2,"Spawns a particle. Args particleName, x, y, z, velX, velY, velZ"
func_72870_g,updateEntity,2,Will update the entity in the world if the chunk the entity is in is currently loaded. Args: entity
func_72871_y,isBlockGettingPowered,2,"Whether one of the neighboring blocks is putting power into this block. Args: x, y, z"
func_72872_a,getEntitiesWithinAABB,2,"Returns all entities of the specified class type which intersect with the AABB. Args: entityClass, aabb"
func_72873_a,doChunksNearChunkExist,2,Checks if any of the chunks within distance (argument 4) blocks of the given block exist
func_72874_g,getPrecipitationHeight,2,Gets the height to which rain/snow will fall. Calculates it if not already stored.
func_72875_a,isMaterialInBB,2,Returns true if the given bounding box contains the given material
func_72876_a,createExplosion,2,"Creates an explosion. Args: entity, x, y, z, strength"
func_72877_b,setWorldTime,2,Sets the world time.
func_72878_l,isBlockIndirectlyProvidingPowerTo,2,"Is a block next to you getting powered (if its an attachable block) or is it providing power directly to you. Args: x, y, z, direction"
func_72878_l,getIndirectPowerLevelTo,2,"Gets the power level from a certain block face. Args: x, y, z, direction"
func_72879_k,isBlockProvidingPowerTo,2,"Is this block powering in the specified direction Args: x, y, z, direction"
func_72880_h,getStarBrightness,2,How bright are stars in the sky
func_72881_d,setBlockMetadata,2,Set the metadata of a block in global coordinates
func_72882_A,sendQuittingDisconnectingPacket,2,"If on MP, sends a quitting packet."
func_72883_k,getFullBlockLightValue,2,Does the same as getBlockLightValue_do but without checking if its not a normal block
func_72884_u,isBlockFreezable,2,checks to see if a given block is both water and is cold enough to freeze
@@ -1434,7 +1423,6 @@ func_72891_a,setAllowedSpawnTypes,2,Set which types of mobs are allowed to spawn
func_72892_b,scheduleBlockUpdateFromLoad,2,Schedules a block update from the saved information in a chunk. Called when the chunk is loaded.
func_72893_g,tickBlocksAndAmbiance,2,plays random cave ambient sounds and runs updateTick on random blocks within each chunk in the vacinity of a player
func_72894_k,setRainStrength,2,
func_72895_f,computeBlockLightValue,2,
func_72896_J,isRaining,2,Returns true if the current rain strength is greater than 0.2
func_72897_h,joinEntityInSurroundings,2,spwans an entity and loads surrounding chunks
func_72898_h,notifyBlocksOfNeighborChange,2,"Notifies neighboring blocks that this specified block changed Args: x, y, z, blockID"
@@ -1456,11 +1444,11 @@ 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,
func_72921_c,setBlockMetadataWithNotify,2,"Sets the blocks metadata and if set will then notify blocks that this block changed. Args: x, y, z, metadata"
func_72921_c,setBlockMetadataWithNotify,2,"Sets the blocks metadata and if set will then notify blocks that this block changed, depending on the flag. Args: x, y, z, metadata, flag. See setBlock for flag description"
func_72922_b,getFirstUncoveredBlock,2,"Returns the block ID of the first block at this (x,z) location with air above it, searching from sea level upwards."
func_72923_a,obtainEntitySkin,2,"Start the skin for this entity downloading, if necessary, and increment its reference counter"
func_72924_a,getPlayerEntityByName,2,Find a player by name in this world.
@@ -1469,7 +1457,6 @@ func_72926_e,playAuxSFX,2,See description for func_72706_a.
func_72927_d,blockHasTileEntity,2,Checks if a block at a given position should have a tile entity.
func_72928_a,markTileEntityForDespawn,2,adds tile entity to despawn list (renamed from markEntityForDespawn)
func_72929_e,getCelestialAngleRadians,2,Return getCelestialAngle()*2*PI
func_72930_a,setBlockAndMetadataWithUpdate,2,"Sets the block ID and metadata of a block, optionally marking it as needing update. Args: X,Y,Z, blockID, metadata, needsUpdate"
func_72931_a,canPlaceEntityOnSide,2,Returns true if the given Entity can be placed on the given side of the given block position.
func_72932_q,removeBlockTileEntity,2,"Removes the TileEntity for a given block in X,Y,Z coordinates"
func_72933_a,rayTraceBlocks,2,"ray traces all blocks, including non-collideable ones"
@@ -1488,10 +1475,8 @@ func_72945_a,getCollidingBoundingBoxes,2,"Returns a list of bounding boxes that
func_72946_b,findClosestStructure,2,Returns the location of the closest structure of the specified type. If not found returns null.
func_72947_a,calculateInitialWeather,2,Called from World constructor to set rainingStrength and thunderingStrength
func_72948_g,getFogColor,2,Returns vector(ish) with R/G/B for fog
func_72949_a,computeSkyLightValue,2,
func_72950_A,setSpawnLocation,2,
func_72951_B,canLightningStrikeAt,2,
func_72952_b,getBlockLightOpacity,2,
func_72953_d,isAnyLiquid,2,Returns if any of the blocks within the aabb are liquids. Args: aabb
func_72954_a,addWorldAccess,2,Adds a IWorldAccess to the list of worldAccesses
func_72955_a,tickUpdates,2,Runs through the list of updates to run and ticks them
@@ -1500,7 +1485,6 @@ func_72957_l,getBlockLightValue,2,Gets the light value of a block location
func_72958_C,isBlockHighHumidity,2,"Checks to see if the biome rainfall values for a given x,y,z coordinate set are extremely high"
func_72959_q,getWorldChunkManager,2,
func_72960_a,setEntityState,2,sends a Packet 38 (Entity Status) to all tracked players of that entity
func_72961_c,setBlockAndMetadata,2,Sets the block ID and metadata of a block in global coordinates
func_72962_a,canMineBlock,2,Called when checking if a certain block can be mined or not. The 'spawn safe zone' check is located here.
func_72963_a,initialize,2,
func_72964_e,getChunkFromChunkCoords,2,"Returns back a chunk looked up by chunk coordinates Args: x, y"
@@ -1526,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
@@ -1671,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,
@@ -1681,19 +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_73641_d,connectToNeighbor,2,"The specified neighbor has just formed a new connection, so update accordingly"
func_73642_a,isMinecartTrack,2,
func_73643_c,canConnectFrom,2,Determines whether or not the target rail can connect to this rail
func_73644_a,refreshConnectedTracks,2,"Neighboring tracks have potentially been broken, so prune the connected track list"
func_73645_a,setConnections,2,
func_73646_c,canConnectTo,2,Determines whether or not the track can bend to meet the specified rail
func_73647_b,isConnectedTo,2,
func_73648_a,getMinecartTrackLogic,2,
func_73649_b,isInTrack,2,Returns true if the specified block is in the same railway.
func_73650_a,getAdjacentTrackCount,2,Get the number of adjacent tracks.
func_73651_b,getAdjacentTracks,2,
func_73652_a,refreshTrackShape,2,Completely recalculates the track shape based on neighboring tracks and power state
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.
@@ -1714,7 +1692,6 @@ func_73688_c,parse,2,
func_73689_b,setBanReason,2,
func_73690_c,getBannedBy,2,
func_73691_b,setBanEndDate,2,
func_73699_a,init,2,Initialises the console logger.
func_73703_b,saveToFile,2,par1: include header
func_73704_a,isBanned,2,
func_73705_d,removeExpiredBans,2,
@@ -1825,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.
@@ -2493,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,
@@ -2537,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
@@ -2590,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.
@@ -2680,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,
@@ -2883,7 +2863,6 @@ func_76594_o,enqueueRelightChecks,2,"Called once-per-chunk-per-tick, and advance
func_76595_e,propagateSkylightOcclusion,2,Propagates a given sky-visible block's light value downward and upward to neighboring blocks as necessary.
func_76596_b,getBlockLightOpacity,2,
func_76597_e,getChunkBlockTileEntity,2,Gets the TileEntity for a given block in this chunk
func_76598_a,setBlockID,2,"Sets a blockID for a position in the chunk. Args: x, y, z, blockID"
func_76599_g,checkSkylightNeighborHeight,2,Checks the height of a block next to a sky-visible block and schedules a lighting update as necessary.
func_76600_a,isAtLocation,2,Checks whether the chunk is at the X/Z location specified
func_76601_a,needsSaving,2,Returns true if this Chunk needs to be saved
@@ -2988,8 +2967,6 @@ func_76837_b,getBiomeGenAt,2,"Returns the BiomeGenBase related to the x, z posit
func_76838_a,cleanupCache,2,Removes BiomeCacheBlocks from this cache that haven't been accessed in at least 30 seconds.
func_76839_e,getCachedBiomes,2,Returns the array of cached biome types in the BiomeCacheBlock at the given location.
func_76840_a,getBiomeCacheBlock,2,Returns a biome cache block at location specified.
func_76845_a,bindImage,2,
func_76846_a,onTick,2,
func_76885_a,getBiomeGenAt,2,"Returns the BiomeGenBase related to the x, z position from the cache block."
func_76893_a,setTileEntityRenderer,2,Associate a TileEntityRenderer with this TileEntitySpecialRenderer
func_76894_a,renderTileEntityAt,2,
@@ -3003,7 +2980,6 @@ func_76905_a,renderTileEntityMobSpawner,2,
func_76906_a,renderEndPortalTileEntity,2,Renders the End Portal.
func_76909_a,renderTileEntitySignAt,2,
func_76911_a,renderTileEntityChestAt,2,Renders the TileEntity for the chest at a position.
func_76914_a,setWaterBiomeColorizer,2,
func_76916_f,getBlockID,2,Gets the BlockID for this BlockEventData
func_76917_e,getEventParameter,2,"Get the Event Parameter (different for each BlockID,EventID)"
func_76918_d,getEventID,2,Get the Event ID (different for each BlockID)
@@ -3055,8 +3031,8 @@ func_77009_a,renderThePainting,2,
func_77012_a,renderTheMinecart,2,Renders the Minecart.
func_77014_a,doRenderItem,2,Renders the item
func_77015_a,renderItemIntoGUI,2,Renders the item's icon or block into the UI at the specified position.
func_77016_a,renderTexturedQuad,2,"Adds a textured quad to the tesselator at the specified position with the specified texture coords, width and height. Args: x, y, u, v, width, height"
func_77017_a,renderQuad,2,"Adds a quad to the tesselator at the specified position with the set width and height and color. Args: tessellator, x, y, width, height, color"
func_77018_a,renderGlint,2,
func_77020_a,renderDroppedItem,2,Renders a dropped item
func_77021_b,renderItemOverlayIntoGUI,2,Renders the item's overlay information. Examples being stack count or damage on top of the item's image at the specified position.
func_77028_a,doRenderLightningBolt,2,Actually renders the lightning bolt. This method is called through the doRender method.
@@ -3083,7 +3059,6 @@ func_77051_a,renderVillagerEquipedItems,2,
func_77052_b,preRenderVillager,2,
func_77053_a,shouldVillagerRenderPass,2,Determines wether Villager Render pass or not.
func_77054_a,renderVillager,2,
func_77055_a,passVillagerSpecialRender,2,Passes the Villager special render.
func_77057_a,getTailRotation,2,
func_77059_a,renderCow,2,
func_77060_a,updateCreeperScale,2,Updates creeper scale in prerender callback
@@ -3116,7 +3091,6 @@ func_77099_a,renderSaddledPig,2,
func_77100_a,renderSpecials,2,Method for adding special render rules
func_77101_a,renderPlayer,2,
func_77102_a,rotatePlayer,2,Rotates the player if the player is sleeping. This method is called in rotateCorpse.
func_77103_a,renderName,2,Used to render a player's name above their head
func_77104_b,renderPlayerScale,2,
func_77105_b,renderPlayerSleep,2,Renders player with sleeping offset if sleeping
func_77107_a,setArmorModel,2,"Set the specified armor model as the player model. Args: player, armorSlot, partialTick"
@@ -3199,6 +3173,7 @@ func_77296_a,requestDownloadOfTexture,2,filename must end in .zip
func_77297_a,downloadTexture,2,
func_77298_g,getAcceptsTextures,2,
func_77299_i,getTexturePackDirContents,2,Return a List<File> of file/directories in the texture pack directory.
func_77301_a,isDownloading,2,
func_77302_a,generateTexturePackID,2,"Generate an internal texture pack ID from the file/directory name, last modification time, and file size. Returns null if the file/directory is not a texture pack."
func_77303_a,setSelectedTexturePack,2,Set the selectedTexturePack field (Inner class static accessor method).
func_77304_b,onDownloadFinished,2,Called from Minecraft.loadWorld() if getIsDownloading() returned true to prepare the downloaded texture for usage.
@@ -3295,7 +3270,6 @@ func_77525_a,getPingResponse,2,
func_77531_d,getFirstDescriptionLine,2,Get the first line of the texture pack description (read from the pack.txt file)
func_77532_a,getResourceAsStream,2,Gives a texture resource as InputStream.
func_77533_a,deleteTexturePack,2,"Delete the OpenGL texture id of the pack's thumbnail image, and close the zip file in case of TexturePackCustom."
func_77534_f,getTexturePackResolution,2,Return the texture pack's resolution (16 by default). Used only by PlayerUsageSnooper. Presumably meant to be overriden by HD texture mods.
func_77535_b,bindThumbnailTexture,2,"Bind the texture id of the pack's thumbnail image, loading it if necessary."
func_77536_b,getTexturePackID,2,Get the texture pack ID
func_77537_e,getSecondDescriptionLine,2,Get the second line of the texture pack description (read from the pack.txt file)
@@ -3369,7 +3343,6 @@ func_77648_a,onItemUse,2,"Callback for item usage. If the item does something sp
func_77649_a,getDamageVsEntity,2,Returns the damage against a given entity.
func_77650_f,getIconIndex,2,Returns the icon index of the stack given as argument.
func_77651_p,getShareTag,2,"If this function returns true (or the item is damageable), the ItemStack's NBT tag will be sent to the client."
func_77652_b,setIconCoord,2,
func_77654_b,onEaten,2,
func_77655_b,setUnlocalizedName,2,"Sets the unlocalized name of this item to the string passed as the parameter, prefixed by ""item."""
func_77656_e,setMaxDamage,2,set max damage of an Item
@@ -3381,7 +3354,6 @@ func_77661_b,getItemUseAction,2,returns the action that specifies what animation
func_77662_d,isFull3D,2,Returns True is the item is renderer in full 3D when hold.
func_77663_a,onUpdate,2,Called each tick as long the item is on a player inventory. Uses by maps to check if is on a player hand and update it's contents.
func_77664_n,setFull3D,2,Sets bFull3D to True and return the object.
func_77665_c,setIconIndex,2,Sets the icon index for this item. Returns the item.
func_77666_t,getPotionEffect,2,Returns a string representing what this item does to a potion.
func_77667_c,getUnlocalizedName,2,Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have different names based on their damage or NBT.
func_77668_q,getContainerItem,2,
@@ -3393,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
@@ -3558,8 +3531,6 @@ func_78350_a,getTextureForDownloadableImage,2,"Takes a URL of a downloadable ima
func_78351_a,setupTexture,2,Copy the supplied image onto the specified OpenGL texture
func_78352_b,refreshTextures,2,Call setupTexture on all currently-loaded textures again to account for changes in rendering options
func_78353_a,allocateAndSetupTexture,2,"Copy the supplied image onto a newly-allocated OpenGL texture, returning the allocated texture name"
func_78354_c,unwrapImageByColumns,2,Takes an image with multiple 16-pixel-wide columns and creates a new 16-pixel-wide image where the columns are stacked vertically
func_78355_a,registerTextureFX,2,
func_78356_a,obtainImageData,2,"Return a ThreadDownloadImageData instance for the given URL. If it does not already exist, it is created and uses the passed ImageBuffer. If it does, its reference count is incremented."
func_78369_a,setColorRGBA_F,2,"Sets the RGBA values for the color, converting from floats between 0 and 1 to integers from 0-255."
func_78370_a,setColorRGBA,2,Sets the RGBA values for the color. Also clamps them to 0-255.
@@ -3631,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
@@ -3663,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,
@@ -3798,6 +3769,7 @@ func_80006_f,getUniqueID,2,
func_80007_l,getDimensionName,2,"Returns the dimension's name, e.g. ""The End"", ""Nether"", or ""Overworld""."
func_82011_an,enableGui,2,
func_82114_b,getPlayerCoordinates,2,Return the position for this command sender.
func_82115_m,getMaxRenderDistanceSquared,2,
func_82116_a,setSkullRotation,2,Set the skull's rotation
func_82117_a,getSkullType,2,Get the entity type for the skull
func_82118_a,setSkullType,2,Set the entity type for the skull
@@ -3811,12 +3783,14 @@ 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.
func_82161_a,getArmorItemForSlot,2,"Params: Armor slot, Item tier"
func_82163_bD,initCreature,2,Initialize this creature.
@@ -3857,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,
@@ -3885,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.
@@ -3903,7 +3880,6 @@ func_82383_a,hasTheseArguments,2,Returns whether the given token (parameter 1) h
func_82384_c,getDefaultMinimumRange,2,Gets the default minimum range (argument rm).
func_82385_b,matchPlayersAsString,2,Returns a nicely-formatted string listing the matching players.
func_82386_a,matchOnePlayer,2,Returns the one player that matches the given at-token. Returns null if more than one player matches.
func_82390_a,drawNeedle,2,Draws the compass needle
func_82392_a,bindTextureByURL,2,"Binds a texture that Minecraft will attempt to load from the given URL. (arguments: url, localFallback)"
func_82394_a,renderTileEntitySkullAt,2,Render a skull tile entity.
func_82398_a,renderTileEntityBeaconAt,2,Render a beacon tile entity.
@@ -3919,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.
@@ -3928,9 +3904,9 @@ 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_82523_e,isLockedByAnotherRepeater,2,
func_82524_c,isRedstoneRepeaterBlockID,2,
func_82525_a,getIPositionFromBlockSource,2,
func_82526_n,dispense,2,
@@ -3942,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,
@@ -3961,6 +3939,8 @@ func_82615_a,getX,2,
func_82616_c,getZ,2,
func_82617_b,getY,2,
func_82618_k,getWorld,2,
func_82619_j,getBlockTileEntity,2,
func_82620_h,getBlockMetadata,2,
func_82621_f,getZInt,2,
func_82622_e,getYInt,2,
func_82623_d,getXInt,2,
@@ -4008,6 +3988,7 @@ func_82725_o,isMagicDamage,2,Returns true if the damage is magic based.
func_82726_p,setMagicDamage,2,Define the damage type as magic based.
func_82732_R,getWorldVec3Pool,2,Return the Vec3Pool object for this world.
func_82733_a,selectEntitiesWithinAABB,2,
func_82734_g,getChunkHeightMapMinimum,2,"Gets the heightMapMinimum field of the given chunk, or 0 if the chunk is not loaded. Coords are in blocks. Args: X, Z"
func_82736_K,getGameRules,2,Gets the GameRules instance.
func_82737_E,getTotalWorldTime,2,
func_82742_i,resetUpdateEntityTick,2,Resets the updateEntityTick field to 0
@@ -4027,7 +4008,6 @@ func_82767_a,getGameRuleStringValue,2,Gets the string Game Rule value.
func_82768_a,readGameRulesFromNBT,2,Set defined game rules from NBT.
func_82769_a,addGameRule,2,Define a game rule and its default value.
func_82770_a,writeGameRulesToNBT,2,Return the defined game rules as NBT.
func_82772_a,updateDynamicTexture,2,Updates a single dynamic texture
func_82773_c,hasImageData,2,Checks if urlToImageDataMap has image data for the given key
func_82774_a,setOverrideBlockTexture,2,Sets overrideBlockTexture
func_82775_a,renderBlockAnvil,2,Renders anvil
@@ -4074,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
@@ -4101,43 +4082,375 @@ func_85054_d,searchForOtherItemsNearby,2,Looks for other itemstacks nearby and t
func_85055_a,makeCrashReport,2,Creates a crash report for the exception
func_85057_a,makeCategoryDepth,2,Creates a CrashReportCategory for the given stack trace depth
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"
func_85096_a,renderBlockAnvilMetadata,2,Renders anvil block with metadata
func_85097_a,callParticlePositionInfo,2,
func_85102_a,playSoundToNearExcept,2,Plays sound to all near players except the player reference given
func_85103_a,canDropFromExplosion,2,Return whether this block can drop from an explosion.
func_85104_a,onBlockPlaced,2,"Called when a block is placed using its ItemBlock. Args: World, X, Y, Z, side, hitX, hitY, hitZ, block metadata"
func_85105_g,onPostBlockPlaced,2,Called after a block is placed
func_85106_a,insertRecord,2,Insert the specified music disc in the jukebox at the given coordinates
func_85107_d,updateLadderBounds,2,Update the ladder block bounds based on the given metadata value.
func_85108_a,callLevelGameModeInfo,2,
func_85110_a,callLevelWeatherInfo,2,
func_85112_a,callLevelStorageFormat,2,
func_85114_a,callLevelDimension,2,
func_85116_n,getThundering,2,Returns wether it's thundering or not.
func_85118_a,addToCrashReport,2,Adds this WorldInfo instance to the crash report.
func_85119_k,getRainTime,2,
func_85120_o,getGameType,2,
func_85121_j,getSaveVersion,2,
func_85123_f,getSpawnZCoordinate,2,
func_85124_e,getSpawnYCoordinate,2,
func_85125_d,getSpawnXCoordinate,2,
func_85127_l,getRaining,2,Returns wether it's raining or not.
func_85128_b,getMapFeaturesEnabled,2,Return the map feautures enabled of a world
func_85129_h,getWorldTime,2,
func_85130_c,getWorldGeneratorOptions,2,
func_85132_a,getTerrainTypeOfWorld,2,Return the terrain type of a world
func_85133_m,getThunderTime,2,
func_85134_a,callLevelSpawnLocation,2,
func_85136_a,callLevelTime,2,
func_85138_a,callLevelGeneratorInfo,2,
func_85140_a,callLevelGeneratorOptions,2,
func_85142_a,callLevelSeed,2,
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,
func_85173_a,playSoundToNearExcept,2,Plays sound to all near players except the player reference given
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
func_90022_d,getListOfPlayers,2,
func_90023_a,callMouseLocation,2,
func_90027_a,callScreenSize,2,
func_90030_a,getRendererMinecraft,2,Get minecraft reference from the EntityRenderer
func_90031_a,callScreenName,2,
func_90033_f,canLoadWorld,2,Return whether the given world can be loaded.
func_90035_a,getClassFromID,2,Return the class assigned to this entity ID.
func_90036_a,getFireAspectModifier,2,
func_90042_d,getRecord,2,Return the record item corresponding to the given name.
func_90043_g,getRecordTitle,2,Return the title for this record.
func_90045_a,callClientProfilerInfo,2,
func_90047_a,callClientMemoryStats,2,
func_90050_a,callTexturePack,2,
func_90052_a,callParticleScreenName,2,
func_90054_a,callUpdatingScreenName,2,
func_90999_ad,canRenderOnFire,2,Return whether this entity should be rendered as on fire.
func_92013_a,setEntityItem,2,Sets the ItemStack corresponding to this Entity (and updates the DataWatcher for it)
func_92014_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_92015_a,getMobID,2,
func_92027_k,sendChatMsg,2,Sends the given string to every player as chat message.
func_92051_a,addRecipe,2,
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_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_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,
func_94157_d,getRectHeight,2,
func_94158_a,getRectX,2,
func_94159_c,getRectWidth,2,
func_94160_b,getRectY,2,
func_94165_a,getBlockIconFromSideAndMetadata,2,
func_94167_b,hasOverrideBlockTexture,2,
func_94170_a,getBlockIcon,2,
func_94171_a,renderBlockComparator,2,
func_94172_a,renderBlockHopper,2,
func_94173_a,getBlockIconFromSide,2,
func_94174_a,renderBlockRedstoneLogicMetadata,2,
func_94175_b,getBlockIcon,2,
func_94176_a,renderBlockRedstoneLogic,2,
func_94178_a,updateIcons,2,
func_94179_g,isCompatible,2,
func_94183_a,getStitchHolder,2,
func_94184_a,getAllStitchSlots,2,Gets the slot and all its subslots
func_94185_c,getOriginY,2,
func_94186_b,getOriginX,2,
func_94193_b,ceil16,2,
func_94194_d,rotate,2,
func_94195_e,isRotated,2,
func_94196_a,setNewDimension,2,
func_94197_a,getWidth,2,
func_94198_a,compareToStitchHolder,2,See Comparable.compareTo.
func_94199_b,getHeight,2,
func_94206_g,getMinV,2,Returns the minimum V coordinate to use when rendering with this icon.
func_94207_b,getInterpolatedV,2,Gets a V coordinate on the icon. 0 returns vMin and 16 returns vMax. Other arguments return in-between values.
func_94208_k,getSheetHeight,2,"Returns the height of the texture sheet this icon is on, in pixels."
func_94209_e,getMinU,2,Returns the minimum U coordinate to use when rendering with this icon.
func_94210_h,getMaxV,2,Returns the maximum V coordinate to use when rendering with this icon.
func_94211_a,getOriginX,2,"Returns the X position of this icon on its texture sheet, in pixels."
func_94212_f,getMaxU,2,Returns the maximum U coordinate to use when rendering with this icon.
func_94213_j,getSheetWidth,2,"Returns the width of the texture sheet this icon is on, in pixels."
func_94214_a,getInterpolatedU,2,Gets a U coordinate on the icon. 0 returns uMin and 16 returns uMax. Other arguments return in-between values.
func_94215_i,getIconName,2,
func_94216_b,getOriginY,2,"Returns the Y position of this icon on its texture sheet, in pixels."
func_94217_a,copyFrom,2,
func_94218_a,init,2,
func_94219_l,updateAnimation,2,
func_94220_a,makeTextureStitched,2,
func_94221_a,readAnimationInfo,2,
func_94241_a,updateCompass,2,"Updates the compass based on the given x,z coords and camera direction"
func_94245_a,registerIcon,2,
func_94246_d,getTexture,2,
func_94247_b,refreshTextures,2,
func_94248_c,updateAnimations,2,
func_94259_a,registerTexture,2,
func_94261_a,makeTexture,2,
func_94262_d,createStitcher,2,
func_94263_a,init,2,
func_94264_a,registerTexture,2,
func_94265_c,getNextTextureId,2,
func_94266_e,createTexture,2,
func_94267_b,instance,2,
func_94272_a,fillRect,2,
func_94273_h,getTextureData,2,
func_94274_a,getTextureRect,2,
func_94275_d,getWidth,2,
func_94276_e,getHeight,2,
func_94277_a,bindTexture,2,
func_94278_a,transferFromImage,2,
func_94279_c,writeImage,2,
func_94280_f,getTextureName,2,
func_94281_a,copyFrom,2,
func_94282_c,getGlTextureId,2,
func_94284_b,getTextureId,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
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,
func_94571_i,setBlockToAir,2,"Sets a block to 0 and notifies relevant systems with the block change Args: x, y, z"
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,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,
func_96445_r,renderBlockQuartz,2,
func_96446_b,getIconSafe,2,
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.
193 func_70364_a openChest 2
194 func_70365_a isUseableByPlayer 2
195 func_70366_b closeChest 2
func_70382_c getMobEntity 2 will create the entity from the internalID the first time it is accessed
func_70383_a writeNBTTagsTo 2
func_70384_a getMobID 2
func_70385_a setMobID 2
func_70386_b anyPlayerInRange 2 Returns true if there is a player in range (using World.getClosestPlayer)
func_70387_f updateDelay 2 Sets the delay before a new spawn (base delay of 200 + random number up to 600).
196 func_70397_c getCookProgressScaled 2 Returns an integer between 0 and the passed value representing how close the current item is to being completely cooked
197 func_70398_a getItemBurnTime 2 Returns the number of ticks that the supplied fuel item will keep the furnace burning, or 0 if the item isn't fuel
198 func_70399_k smeltItem 2 Turn one item from the furnace source stack into the appropriate smelted item in the furnace result stack
239 func_70485_a setAssociatedChest 2
240 func_70486_a loadInventoryFromNBT 2
241 func_70487_g saveInventoryToNBT 2
func_70490_h isMinecartPowered 2 Is this minecart powered (Fuel > 0)
242 func_70491_i getDamage 2 Gets the current amount of damage the minecart has taken. Decreases over time. The cart breaks when this is over 40.
243 func_70492_c setDamage 2 Sets the current amount of damage the minecart has taken. Decreases over time. The cart breaks when this is over 40.
244 func_70493_k getRollingDirection 2 Gets the rolling direction the cart rolls while being attacked. Can be 1 or -1.
245 func_70494_i setRollingDirection 2 Sets the rolling direction the cart rolls while being attacked. Can be 1 or -1.
246 func_70496_j getRollingAmplitude 2 Gets the rolling amplitude the cart rolls while being attacked.
247 func_70497_h setRollingAmplitude 2 Sets the rolling amplitude the cart rolls while being attacked.
func_70498_d setMinecartPowered 2 Set if this minecart is powered (Fuel > 0)
248 func_70515_d explode 2
249 func_70518_d onValidSurface 2 checks to make sure painting can be placed there
250 func_70526_d getXpValue 2 Returns the XP value of this XP orb.
256 func_70537_b getFXLayer 2
257 func_70538_b setRBGColorF 2
258 func_70539_a renderParticle 2
func_70540_h getParticleTextureIndex 2
259 func_70541_f multipleParticleScaleBy 2
260 func_70542_f getGreenColorF 2
261 func_70543_e multiplyVelocity 2
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.
471 func_71000_j addMovementStat 2 Adds a value to a movement statistic field - like run, walk, swin or climb.
472 func_71001_a onItemPickup 2 Called whenever an item is picked up from walking over it. Args: pickedUpEntity, stackSize
473 func_71002_c displayGUIEnchantment 2
func_71003_h isPVPEnabled 2 returns if pvp is enabled or not
474 func_71004_bE respawnPlayer 2
475 func_71005_bN getInventoryEnderChest 2 Returns the InventoryEnderChest of this player.
476 func_71006_a displayGUIDispenser 2 Displays the dipsenser GUI for the passed in dispenser entity. Args: TileEntityDispenser
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.
674 func_71365_K screenshotListener 2 checks if keys are down
675 func_71366_a displayDebugInfo 2
676 func_71367_a setServer 2
func_71368_v isDebugInfoEnabled 2
677 func_71369_N getGLMaximumTextureSize 2 Used in the usage snooper.
678 func_71370_a resize 2 Called to resize the current screen.
679 func_71371_a launchIntegratedServer 2 Arguments: World foldername, World ingame name, WorldSettings
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
847 func_71862_a randomDisplayTick 2 A randomly called display update to be able to add particles or other items for display
848 func_71863_a onNeighborBlockChange 2 Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are their own) Args: x, y, z, neighbor blockID
849 func_71864_b setUnlocalizedName 2 Sets the unlocalized name of the block to the string passed as a parameter, prefixed by "tile."
850 func_71865_a isProvidingWeakPower 2 Returns true if the block is emitting indirect/weak redstone power on the specified side. If isBlockNormalCube returns true, standard redstone propagation rules will apply instead and this will not be called. Args: World, X, Y, Z, side. Note that the side is reversed - eg it is 1 (up) when checking the bottom of the block.
851 func_71866_a onFallenUpon 2 Block's chance to react to an entity falling on it.
852 func_71867_k onBlockDestroyedByExplosion 2 Called upon the block being destroyed by an explosion
893 func_71908_a getPlayerRelativeBlockHardness 2 Gets the hardness of block at the given coordinates in the given world, relative to the ability of the given EntityPlayer.
894 func_71910_a quantityDroppedWithBonus 2 Returns the usual quantity dropped by the block plus a bonus of 1 to 'i' (inclusive).
895 func_71911_a_ getSelectedBoundingBoxFromPool 2 Returns the bounding box of the wired rectangular prism to render.
func_71912_p setRequiresSelfNotify 2 Blocks with this attribute will not notify all near blocks when it's metadata change. The default behavior is always notify every neightbor block when anything changes.
896 func_71913_a canCollideCheck 2 Returns whether this block is collideable based on the arguments passed in Args: blockMetaData, unknownFlag
897 func_71914_a dropBlockAsItemWithChance 2 Drops the block items with a specified chance of dropping the specified items
898 func_71915_e getMobilityFlag 2 Returns the mobility information of the block, 0 = free, 1 = can't push but can move over, 2 = total immobility and stop pistons
960 func_72173_e isPowerProviderOrWire 2 Returns true if redstone wire can connect to the specified block. Params: World, X, Y, Z, side (not a normal notch-side, this can be 0, 1, 2, 3 or -1)
961 func_72176_l glow 2 The redstone ore glows.
962 func_72177_n sparkle 2 The redstone ore sparkles.
func_72179_a isPoweredBlockRail 2 Return true if the blocks passed is a power related rail.
963 func_72180_d_ isRailBlockAt 2 Returns true if the block at the coordinates of world passed is a valid rail block (current is rail, powered or detector).
964 func_72181_a refreshTrackShape 2 Completely recalculates the track shape based on neighboring tracks
func_72182_a isNeighborRailPowered 2 Powered minecart rail is conductive like wire, so check for powered neighbors
965 func_72183_n isPowered 2 Returns true if the block is power related rail.
966 func_72184_d isRailBlock 2 Return true if the parameter is a blockID for a valid rail block (current is rail, powered or detector).
func_72185_a isRailPassingPower 2 Returns true if the specified rail is passing power to its neighbor
967 func_72187_e setStateIfMinecartInteractsWithRail 2 Update the detector rail power state if a minecart enter, stays or leave the block.
968 func_72190_l tryToFall 2 If there is space to fall below will start this block falling
969 func_72191_e_ canFallBelow 2 Checks to see if the sand can fall into the block below it
987 func_72215_l setNotStationary 2 Changes the block ID to that of an updating fluid.
988 func_72216_n isFlammable 2 Checks to see if the block is flammable.
989 func_72217_d getDirection 2 Returns the orentation value from the specified metadata
990 func_72220_e ignoreTick getInputStrength 2 Returns the signal strength at one input of the block. Args: world, X, Y, Z, side
991 func_72224_c isFenceGateOpen 2 Returns if the fence gate is open according to its metadata.
992 func_72225_b_ isBedOccupied 2 Return whether or not the bed is occupied.
993 func_72226_b getNearestEmptyChunkCoordinates 2 Gets the nearest empty chunk coordinates for the player to wake up from a bed into.
1355 func_72819_i getWeightedThunderStrength 2
1356 func_72820_D getWorldTime 2
1357 func_72821_m notifyBlockOfNeighborChange 2 Notifies a block that one of its neighbor change to the specified type Args: x, y, z, blockID
func_72822_b setBlock 2 Sets the block to the specified blockID at the block coordinates Args x, y, z, blockID
1358 func_72823_a setItemData 2 Assigns the given String id to the given MapDataBase using the MapStorage, removing any existing ones of the same id.
1359 func_72824_f getCloudColour 2
1360 func_72825_h getTopSolidOrLiquidBlock 2 Finds the highest block on the x, z coordinate that is solid and returns its y coord. Args x, 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 setBlockAndMetadataWithNotify setBlock 2 Sets the block ID and metadata, then notifies neighboring blocks of the change Params: x, y, z, BlockID, Metadata 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
func_72859_e setBlockWithNotify 2 Sets a block and notifies relevant systems with the block change Args: x, y, z, blockID
1394 func_72860_G getSaveHandler 2 Returns this world's current save handler
1395 func_72861_E getSpawnPoint 2 Returns the coordinates of the spawn point
func_72862_i markBlockForRenderUpdate2 2 On the client, re-renders this block. On the server, does nothing. Appears to be redundant.
1396 func_72863_F getChunkProvider 2 gets the IChunkProvider this world uses.
1397 func_72864_z isBlockIndirectlyGettingPowered 2 Used to see if one of the blocks next to you or your block is getting power from a neighboring block. Used by items like TNT or Doors so they don't have redstone going straight into them. Args: x, y, z
1398 func_72865_a getPathEntityToEntity 2
1401 func_72868_a addLoadedEntities 2 adds entities to the loaded entities list, and loads thier skins.
1402 func_72869_a spawnParticle 2 Spawns a particle. Args particleName, x, y, z, velX, velY, velZ
1403 func_72870_g updateEntity 2 Will update the entity in the world if the chunk the entity is in is currently loaded. Args: entity
func_72871_y isBlockGettingPowered 2 Whether one of the neighboring blocks is putting power into this block. Args: x, y, z
1404 func_72872_a getEntitiesWithinAABB 2 Returns all entities of the specified class type which intersect with the AABB. Args: entityClass, aabb
1405 func_72873_a doChunksNearChunkExist 2 Checks if any of the chunks within distance (argument 4) blocks of the given block exist
1406 func_72874_g getPrecipitationHeight 2 Gets the height to which rain/snow will fall. Calculates it if not already stored.
1407 func_72875_a isMaterialInBB 2 Returns true if the given bounding box contains the given material
1408 func_72876_a createExplosion 2 Creates an explosion. Args: entity, x, y, z, strength
1409 func_72877_b setWorldTime 2 Sets the world time.
1410 func_72878_l isBlockIndirectlyProvidingPowerTo getIndirectPowerLevelTo 2 Is a block next to you getting powered (if its an attachable block) or is it providing power directly to you. Args: x, y, z, direction Gets the power level from a certain block face. Args: x, y, z, direction
1411 func_72879_k isBlockProvidingPowerTo 2 Is this block powering in the specified direction Args: x, y, z, direction
1412 func_72880_h getStarBrightness 2 How bright are stars in the sky
func_72881_d setBlockMetadata 2 Set the metadata of a block in global coordinates
1413 func_72882_A sendQuittingDisconnectingPacket 2 If on MP, sends a quitting packet.
1414 func_72883_k getFullBlockLightValue 2 Does the same as getBlockLightValue_do but without checking if its not a normal block
1415 func_72884_u isBlockFreezable 2 checks to see if a given block is both water and is cold enough to freeze
1423 func_72892_b scheduleBlockUpdateFromLoad 2 Schedules a block update from the saved information in a chunk. Called when the chunk is loaded.
1424 func_72893_g tickBlocksAndAmbiance 2 plays random cave ambient sounds and runs updateTick on random blocks within each chunk in the vacinity of a player
1425 func_72894_k setRainStrength 2
func_72895_f computeBlockLightValue 2
1426 func_72896_J isRaining 2 Returns true if the current rain strength is greater than 0.2
1427 func_72897_h joinEntityInSurroundings 2 spwans an entity and loads surrounding chunks
1428 func_72898_h notifyBlocksOfNeighborChange 2 Notifies neighboring blocks that this specified block changed Args: x, y, z, blockID
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
1451 func_72921_c setBlockMetadataWithNotify 2 Sets the blocks metadata and if set will then notify blocks that this block changed. Args: x, y, z, metadata Sets the blocks metadata and if set will then notify blocks that this block changed, depending on the flag. Args: x, y, z, metadata, flag. See setBlock for flag description
1452 func_72922_b getFirstUncoveredBlock 2 Returns the block ID of the first block at this (x,z) location with air above it, searching from sea level upwards.
1453 func_72923_a obtainEntitySkin 2 Start the skin for this entity downloading, if necessary, and increment its reference counter
1454 func_72924_a getPlayerEntityByName 2 Find a player by name in this world.
1457 func_72927_d blockHasTileEntity 2 Checks if a block at a given position should have a tile entity.
1458 func_72928_a markTileEntityForDespawn 2 adds tile entity to despawn list (renamed from markEntityForDespawn)
1459 func_72929_e getCelestialAngleRadians 2 Return getCelestialAngle()*2*PI
func_72930_a setBlockAndMetadataWithUpdate 2 Sets the block ID and metadata of a block, optionally marking it as needing update. Args: X,Y,Z, blockID, metadata, needsUpdate
1460 func_72931_a canPlaceEntityOnSide 2 Returns true if the given Entity can be placed on the given side of the given block position.
1461 func_72932_q removeBlockTileEntity 2 Removes the TileEntity for a given block in X,Y,Z coordinates
1462 func_72933_a rayTraceBlocks 2 ray traces all blocks, including non-collideable ones
1475 func_72946_b findClosestStructure 2 Returns the location of the closest structure of the specified type. If not found returns null.
1476 func_72947_a calculateInitialWeather 2 Called from World constructor to set rainingStrength and thunderingStrength
1477 func_72948_g getFogColor 2 Returns vector(ish) with R/G/B for fog
func_72949_a computeSkyLightValue 2
1478 func_72950_A setSpawnLocation 2
1479 func_72951_B canLightningStrikeAt 2
func_72952_b getBlockLightOpacity 2
1480 func_72953_d isAnyLiquid 2 Returns if any of the blocks within the aabb are liquids. Args: aabb
1481 func_72954_a addWorldAccess 2 Adds a IWorldAccess to the list of worldAccesses
1482 func_72955_a tickUpdates 2 Runs through the list of updates to run and ticks them
1485 func_72958_C isBlockHighHumidity 2 Checks to see if the biome rainfall values for a given x,y,z coordinate set are extremely high
1486 func_72959_q getWorldChunkManager 2
1487 func_72960_a setEntityState 2 sends a Packet 38 (Entity Status) to all tracked players of that entity
func_72961_c setBlockAndMetadata 2 Sets the block ID and metadata of a block in global coordinates
1488 func_72962_a canMineBlock 2 Called when checking if a certain block can be mined or not. The 'spawn safe zone' check is located here.
1489 func_72963_a initialize 2
1490 func_72964_e getChunkFromChunkCoords 2 Returns back a chunk looked up by chunk coordinates Args: x, y
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_73641_d func_73607_d connectToNeighbor getPlayerVelocityX 2 The specified neighbor has just formed a new connection, so update accordingly Gets the X velocity of the player being pushed by the explosion.
1673 func_73642_a func_73608_g isMinecartTrack getPlayerVelocityZ 2 Gets the Z velocity of the player being pushed by the explosion.
1674 func_73643_c func_73609_f canConnectFrom getPlayerVelocityY 2 Determines whether or not the target rail can connect to this rail Gets the Y velocity of the player being pushed by the explosion.
func_73644_a refreshConnectedTracks 2 Neighboring tracks have potentially been broken, so prune the connected track list
func_73645_a setConnections 2
func_73646_c canConnectTo 2 Determines whether or not the track can bend to meet the specified rail
func_73647_b isConnectedTo 2
func_73648_a getMinecartTrackLogic 2
func_73649_b isInTrack 2 Returns true if the specified block is in the same railway.
func_73650_a getAdjacentTrackCount 2 Get the number of adjacent tracks.
func_73651_b getAdjacentTracks 2
func_73652_a refreshTrackShape 2 Completely recalculates the track shape based on neighboring tracks and power state
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.
1692 func_73689_b setBanReason 2
1693 func_73690_c getBannedBy 2
1694 func_73691_b setBanEndDate 2
func_73699_a init 2 Initialises the console logger.
1695 func_73703_b saveToFile 2 par1: include header
1696 func_73704_a isBanned 2
1697 func_73705_d removeExpiredBans 2
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
2863 func_76595_e propagateSkylightOcclusion 2 Propagates a given sky-visible block's light value downward and upward to neighboring blocks as necessary.
2864 func_76596_b getBlockLightOpacity 2
2865 func_76597_e getChunkBlockTileEntity 2 Gets the TileEntity for a given block in this chunk
func_76598_a setBlockID 2 Sets a blockID for a position in the chunk. Args: x, y, z, blockID
2866 func_76599_g checkSkylightNeighborHeight 2 Checks the height of a block next to a sky-visible block and schedules a lighting update as necessary.
2867 func_76600_a isAtLocation 2 Checks whether the chunk is at the X/Z location specified
2868 func_76601_a needsSaving 2 Returns true if this Chunk needs to be saved
2967 func_76838_a cleanupCache 2 Removes BiomeCacheBlocks from this cache that haven't been accessed in at least 30 seconds.
2968 func_76839_e getCachedBiomes 2 Returns the array of cached biome types in the BiomeCacheBlock at the given location.
2969 func_76840_a getBiomeCacheBlock 2 Returns a biome cache block at location specified.
func_76845_a bindImage 2
func_76846_a onTick 2
2970 func_76885_a getBiomeGenAt 2 Returns the BiomeGenBase related to the x, z position from the cache block.
2971 func_76893_a setTileEntityRenderer 2 Associate a TileEntityRenderer with this TileEntitySpecialRenderer
2972 func_76894_a renderTileEntityAt 2
2980 func_76906_a renderEndPortalTileEntity 2 Renders the End Portal.
2981 func_76909_a renderTileEntitySignAt 2
2982 func_76911_a renderTileEntityChestAt 2 Renders the TileEntity for the chest at a position.
func_76914_a setWaterBiomeColorizer 2
2983 func_76916_f getBlockID 2 Gets the BlockID for this BlockEventData
2984 func_76917_e getEventParameter 2 Get the Event Parameter (different for each BlockID,EventID)
2985 func_76918_d getEventID 2 Get the Event ID (different for each BlockID)
3031 func_77012_a renderTheMinecart 2 Renders the Minecart.
3032 func_77014_a doRenderItem 2 Renders the item
3033 func_77015_a renderItemIntoGUI 2 Renders the item's icon or block into the UI at the specified position.
func_77016_a renderTexturedQuad 2 Adds a textured quad to the tesselator at the specified position with the specified texture coords, width and height. Args: x, y, u, v, width, height
3034 func_77017_a renderQuad 2 Adds a quad to the tesselator at the specified position with the set width and height and color. Args: tessellator, x, y, width, height, color
3035 func_77018_a renderGlint 2
3036 func_77020_a renderDroppedItem 2 Renders a dropped item
3037 func_77021_b renderItemOverlayIntoGUI 2 Renders the item's overlay information. Examples being stack count or damage on top of the item's image at the specified position.
3038 func_77028_a doRenderLightningBolt 2 Actually renders the lightning bolt. This method is called through the doRender method.
3059 func_77052_b preRenderVillager 2
3060 func_77053_a shouldVillagerRenderPass 2 Determines wether Villager Render pass or not.
3061 func_77054_a renderVillager 2
func_77055_a passVillagerSpecialRender 2 Passes the Villager special render.
3062 func_77057_a getTailRotation 2
3063 func_77059_a renderCow 2
3064 func_77060_a updateCreeperScale 2 Updates creeper scale in prerender callback
3091 func_77100_a renderSpecials 2 Method for adding special render rules
3092 func_77101_a renderPlayer 2
3093 func_77102_a rotatePlayer 2 Rotates the player if the player is sleeping. This method is called in rotateCorpse.
func_77103_a renderName 2 Used to render a player's name above their head
3094 func_77104_b renderPlayerScale 2
3095 func_77105_b renderPlayerSleep 2 Renders player with sleeping offset if sleeping
3096 func_77107_a setArmorModel 2 Set the specified armor model as the player model. Args: player, armorSlot, partialTick
3173 func_77297_a downloadTexture 2
3174 func_77298_g getAcceptsTextures 2
3175 func_77299_i getTexturePackDirContents 2 Return a List<File> of file/directories in the texture pack directory.
3176 func_77301_a isDownloading 2
3177 func_77302_a generateTexturePackID 2 Generate an internal texture pack ID from the file/directory name, last modification time, and file size. Returns null if the file/directory is not a texture pack.
3178 func_77303_a setSelectedTexturePack 2 Set the selectedTexturePack field (Inner class static accessor method).
3179 func_77304_b onDownloadFinished 2 Called from Minecraft.loadWorld() if getIsDownloading() returned true to prepare the downloaded texture for usage.
3270 func_77531_d getFirstDescriptionLine 2 Get the first line of the texture pack description (read from the pack.txt file)
3271 func_77532_a getResourceAsStream 2 Gives a texture resource as InputStream.
3272 func_77533_a deleteTexturePack 2 Delete the OpenGL texture id of the pack's thumbnail image, and close the zip file in case of TexturePackCustom.
func_77534_f getTexturePackResolution 2 Return the texture pack's resolution (16 by default). Used only by PlayerUsageSnooper. Presumably meant to be overriden by HD texture mods.
3273 func_77535_b bindThumbnailTexture 2 Bind the texture id of the pack's thumbnail image, loading it if necessary.
3274 func_77536_b getTexturePackID 2 Get the texture pack ID
3275 func_77537_e getSecondDescriptionLine 2 Get the second line of the texture pack description (read from the pack.txt file)
3343 func_77649_a getDamageVsEntity 2 Returns the damage against a given entity.
3344 func_77650_f getIconIndex 2 Returns the icon index of the stack given as argument.
3345 func_77651_p getShareTag 2 If this function returns true (or the item is damageable), the ItemStack's NBT tag will be sent to the client.
func_77652_b setIconCoord 2
3346 func_77654_b onEaten 2
3347 func_77655_b setUnlocalizedName 2 Sets the unlocalized name of this item to the string passed as the parameter, prefixed by "item."
3348 func_77656_e setMaxDamage 2 set max damage of an Item
3354 func_77662_d isFull3D 2 Returns True is the item is renderer in full 3D when hold.
3355 func_77663_a onUpdate 2 Called each tick as long the item is on a player inventory. Uses by maps to check if is on a player hand and update it's contents.
3356 func_77664_n setFull3D 2 Sets bFull3D to True and return the object.
func_77665_c setIconIndex 2 Sets the icon index for this item. Returns the item.
3357 func_77666_t getPotionEffect 2 Returns a string representing what this item does to a potion.
3358 func_77667_c getUnlocalizedName 2 Returns the unlocalized name of this item. This version accepts an ItemStack so different stacks can have different names based on their damage or NBT.
3359 func_77668_q getContainerItem 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
3531 func_78351_a setupTexture 2 Copy the supplied image onto the specified OpenGL texture
3532 func_78352_b refreshTextures 2 Call setupTexture on all currently-loaded textures again to account for changes in rendering options
3533 func_78353_a allocateAndSetupTexture 2 Copy the supplied image onto a newly-allocated OpenGL texture, returning the allocated texture name
func_78354_c unwrapImageByColumns 2 Takes an image with multiple 16-pixel-wide columns and creates a new 16-pixel-wide image where the columns are stacked vertically
func_78355_a registerTextureFX 2
3534 func_78356_a obtainImageData 2 Return a ThreadDownloadImageData instance for the given URL. If it does not already exist, it is created and uses the passed ImageBuffer. If it does, its reference count is incremented.
3535 func_78369_a setColorRGBA_F 2 Sets the RGBA values for the color, converting from floats between 0 and 1 to integers from 0-255.
3536 func_78370_a setColorRGBA 2 Sets the RGBA values for the color. Also clamps them to 0-255.
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
3769 func_80007_l getDimensionName 2 Returns the dimension's name, e.g. "The End", "Nether", or "Overworld".
3770 func_82011_an enableGui 2
3771 func_82114_b getPlayerCoordinates 2 Return the position for this command sender.
3772 func_82115_m getMaxRenderDistanceSquared 2
3773 func_82116_a setSkullRotation 2 Set the skull's rotation
3774 func_82117_a getSkullType 2 Get the entity type for the skull
3775 func_82118_a setSkullType 2 Set the entity type for the skull
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.
3795 func_82161_a getArmorItemForSlot 2 Params: Armor slot, Item tier
3796 func_82163_bD initCreature 2 Initialize this creature.
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.
3880 func_82384_c getDefaultMinimumRange 2 Gets the default minimum range (argument rm).
3881 func_82385_b matchPlayersAsString 2 Returns a nicely-formatted string listing the matching players.
3882 func_82386_a matchOnePlayer 2 Returns the one player that matches the given at-token. Returns null if more than one player matches.
func_82390_a drawNeedle 2 Draws the compass needle
3883 func_82392_a bindTextureByURL 2 Binds a texture that Minecraft will attempt to load from the given URL. (arguments: url, localFallback)
3884 func_82394_a renderTileEntitySkullAt 2 Render a skull tile entity.
3885 func_82398_a renderTileEntityBeaconAt 2 Render a beacon tile entity.
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
func_82523_e isLockedByAnotherRepeater 2
3910 func_82524_c isRedstoneRepeaterBlockID 2
3911 func_82525_a getIPositionFromBlockSource 2
3912 func_82526_n dispense 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
3939 func_82616_c getZ 2
3940 func_82617_b getY 2
3941 func_82618_k getWorld 2
3942 func_82619_j getBlockTileEntity 2
3943 func_82620_h getBlockMetadata 2
3944 func_82621_f getZInt 2
3945 func_82622_e getYInt 2
3946 func_82623_d getXInt 2
3988 func_82726_p setMagicDamage 2 Define the damage type as magic based.
3989 func_82732_R getWorldVec3Pool 2 Return the Vec3Pool object for this world.
3990 func_82733_a selectEntitiesWithinAABB 2
3991 func_82734_g getChunkHeightMapMinimum 2 Gets the heightMapMinimum field of the given chunk, or 0 if the chunk is not loaded. Coords are in blocks. Args: X, Z
3992 func_82736_K getGameRules 2 Gets the GameRules instance.
3993 func_82737_E getTotalWorldTime 2
3994 func_82742_i resetUpdateEntityTick 2 Resets the updateEntityTick field to 0
4008 func_82768_a readGameRulesFromNBT 2 Set defined game rules from NBT.
4009 func_82769_a addGameRule 2 Define a game rule and its default value.
4010 func_82770_a writeGameRulesToNBT 2 Return the defined game rules as NBT.
func_82772_a updateDynamicTexture 2 Updates a single dynamic texture
4011 func_82773_c hasImageData 2 Checks if urlToImageDataMap has image data for the given key
4012 func_82774_a setOverrideBlockTexture 2 Sets overrideBlockTexture
4013 func_82775_a renderBlockAnvil 2 Renders anvil
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
4082 func_85055_a makeCrashReport 2 Creates a crash report for the exception
4083 func_85057_a makeCategoryDepth 2 Creates a CrashReportCategory for the given stack trace depth
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
4091 func_85096_a renderBlockAnvilMetadata 2 Renders anvil block with metadata
4092 func_85097_a callParticlePositionInfo 2
4093 func_85102_a playSoundToNearExcept 2 Plays sound to all near players except the player reference given
4094 func_85103_a canDropFromExplosion 2 Return whether this block can drop from an explosion.
4095 func_85104_a onBlockPlaced 2 Called when a block is placed using its ItemBlock. Args: World, X, Y, Z, side, hitX, hitY, hitZ, block metadata
4096 func_85105_g onPostBlockPlaced 2 Called after a block is placed
4097 func_85106_a insertRecord 2 Insert the specified music disc in the jukebox at the given coordinates
4098 func_85107_d updateLadderBounds 2 Update the ladder block bounds based on the given metadata value.
4099 func_85108_a callLevelGameModeInfo 2
4100 func_85110_a callLevelWeatherInfo 2
4101 func_85112_a callLevelStorageFormat 2
4102 func_85114_a callLevelDimension 2
4103 func_85116_n getThundering 2 Returns wether it's thundering or not.
4104 func_85118_a addToCrashReport 2 Adds this WorldInfo instance to the crash report.
4105 func_85119_k getRainTime 2
4106 func_85120_o getGameType 2
4107 func_85121_j getSaveVersion 2
4108 func_85123_f getSpawnZCoordinate 2
4109 func_85124_e getSpawnYCoordinate 2
4110 func_85125_d getSpawnXCoordinate 2
4111 func_85127_l getRaining 2 Returns wether it's raining or not.
4112 func_85128_b getMapFeaturesEnabled 2 Return the map feautures enabled of a world
4113 func_85129_h getWorldTime 2
4114 func_85130_c getWorldGeneratorOptions 2
4115 func_85132_a getTerrainTypeOfWorld 2 Return the terrain type of a world
4116 func_85133_m getThunderTime 2
4117 func_85134_a callLevelSpawnLocation 2
4118 func_85136_a callLevelTime 2
4119 func_85138_a callLevelGeneratorInfo 2
4120 func_85140_a callLevelGeneratorOptions 2
4121 func_85142_a callLevelSeed 2
4122 func_85145_a callTileEntityName 2
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
4131 func_85173_a playSoundToNearExcept 2 Plays sound to all near players except the player reference given
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
4142 func_90022_d getListOfPlayers 2
4143 func_90023_a callMouseLocation 2
4144 func_90027_a callScreenSize 2
4145 func_90030_a getRendererMinecraft 2 Get minecraft reference from the EntityRenderer
4146 func_90031_a callScreenName 2
4147 func_90033_f canLoadWorld 2 Return whether the given world can be loaded.
4148 func_90035_a getClassFromID 2 Return the class assigned to this entity ID.
4149 func_90036_a getFireAspectModifier 2
4150 func_90042_d getRecord 2 Return the record item corresponding to the given name.
4151 func_90043_g getRecordTitle 2 Return the title for this record.
4152 func_90045_a callClientProfilerInfo 2
4153 func_90047_a callClientMemoryStats 2
4154 func_90050_a callTexturePack 2
4155 func_90052_a callParticleScreenName 2
4156 func_90054_a callUpdatingScreenName 2
4157 func_90999_ad canRenderOnFire 2 Return whether this entity should be rendered as on fire.
func_92013_a setEntityItem 2 Sets the ItemStack corresponding to this Entity (and updates the DataWatcher for it)
func_92014_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_92015_a getMobID 2
func_92027_k sendChatMsg 2 Sends the given string to every player as chat message.
func_92051_a addRecipe 2
4158 func_92058_a setEntityItemStack 2 Sets the ItemStack for this entity
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_94083_c getTntPlacedBy 2 returns null or the entityliving it was placed or ignited by
4174 func_94085_r getDefaultDisplayTileOffset 2
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_94144_a 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
4206 func_94157_d getRectHeight 2
4207 func_94158_a getRectX 2
4208 func_94159_c getRectWidth 2
4209 func_94160_b getRectY 2
4210 func_94165_a getBlockIconFromSideAndMetadata 2
4211 func_94167_b hasOverrideBlockTexture 2
4212 func_94170_a getBlockIcon 2
4213 func_94171_a renderBlockComparator 2
4214 func_94172_a renderBlockHopper 2
4215 func_94173_a getBlockIconFromSide 2
4216 func_94174_a renderBlockRedstoneLogicMetadata 2
4217 func_94175_b getBlockIcon 2
4218 func_94176_a renderBlockRedstoneLogic 2
4219 func_94178_a updateIcons 2
4220 func_94179_g isCompatible 2
4221 func_94183_a getStitchHolder 2
4222 func_94184_a getAllStitchSlots 2 Gets the slot and all its subslots
4223 func_94185_c getOriginY 2
4224 func_94186_b getOriginX 2
4225 func_94193_b ceil16 2
4226 func_94194_d rotate 2
4227 func_94195_e isRotated 2
4228 func_94196_a setNewDimension 2
4229 func_94197_a getWidth 2
4230 func_94198_a compareToStitchHolder 2 See Comparable.compareTo.
4231 func_94199_b getHeight 2
4232 func_94206_g getMinV 2 Returns the minimum V coordinate to use when rendering with this icon.
4233 func_94207_b getInterpolatedV 2 Gets a V coordinate on the icon. 0 returns vMin and 16 returns vMax. Other arguments return in-between values.
4234 func_94208_k getSheetHeight 2 Returns the height of the texture sheet this icon is on, in pixels.
4235 func_94209_e getMinU 2 Returns the minimum U coordinate to use when rendering with this icon.
4236 func_94210_h getMaxV 2 Returns the maximum V coordinate to use when rendering with this icon.
4237 func_94211_a getOriginX 2 Returns the X position of this icon on its texture sheet, in pixels.
4238 func_94212_f getMaxU 2 Returns the maximum U coordinate to use when rendering with this icon.
4239 func_94213_j getSheetWidth 2 Returns the width of the texture sheet this icon is on, in pixels.
4240 func_94214_a getInterpolatedU 2 Gets a U coordinate on the icon. 0 returns uMin and 16 returns uMax. Other arguments return in-between values.
4241 func_94215_i getIconName 2
4242 func_94216_b getOriginY 2 Returns the Y position of this icon on its texture sheet, in pixels.
4243 func_94217_a copyFrom 2
4244 func_94218_a init 2
4245 func_94219_l updateAnimation 2
4246 func_94220_a makeTextureStitched 2
4247 func_94221_a readAnimationInfo 2
4248 func_94241_a updateCompass 2 Updates the compass based on the given x,z coords and camera direction
4249 func_94245_a registerIcon 2
4250 func_94246_d getTexture 2
4251 func_94247_b refreshTextures 2
4252 func_94248_c updateAnimations 2
4253 func_94259_a registerTexture 2
4254 func_94261_a makeTexture 2
4255 func_94262_d createStitcher 2
4256 func_94263_a init 2
4257 func_94264_a registerTexture 2
4258 func_94265_c getNextTextureId 2
4259 func_94266_e createTexture 2
4260 func_94267_b instance 2
4261 func_94272_a fillRect 2
4262 func_94273_h getTextureData 2
4263 func_94274_a getTextureRect 2
4264 func_94275_d getWidth 2
4265 func_94276_e getHeight 2
4266 func_94277_a bindTexture 2
4267 func_94278_a transferFromImage 2
4268 func_94279_c writeImage 2
4269 func_94280_f getTextureName 2
4270 func_94281_a copyFrom 2
4271 func_94282_c getGlTextureId 2
4272 func_94284_b getTextureId 2
4273 func_94285_g 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
4277 func_94309_g getStichSlots 2
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
4315 func_94571_i setBlockToAir 2 Sets a block to 0 and notifies relevant systems with the block change Args: x, y, z
4316 func_94572_D getStrongestIndirectPower 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 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
4370 func_96445_r renderBlockQuartz 2
4371 func_96446_b getIconSafe 2
4372 func_96447_a renderBlockHopperMetadata 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 -62
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,29 +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
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
@@ -319,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
@@ -353,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
@@ -393,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
@@ -412,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
@@ -472,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
@@ -496,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
@@ -546,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
@@ -655,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
@@ -670,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
@@ -698,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
@@ -708,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
@@ -727,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
@@ -781,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
@@ -818,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
@@ -829,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
@@ -840,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
@@ -883,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
@@ -890,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
@@ -931,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
@@ -949,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
@@ -1009,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
@@ -1025,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
@@ -1060,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
@@ -1095,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
@@ -1128,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
@@ -1164,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
@@ -1181,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
@@ -1191,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
@@ -1203,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
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
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
+209 -86
View File
@@ -1,12 +1,162 @@
param,name,side
p_100001_0_,par0,2
p_100003_1_,par1,2
p_100006_1_,par1Str,2
p_100006_2_,par2Str,2
p_100009_0_,par0,2
p_100012_1_,par1,2
p_100014_0_,par0McoServerList,2
p_100015_0_,par0KeyBinding,2
p_101000_0_,par0GuiScreenOnlineServers,2
p_101001_1_,par1,2
p_101001_2_,par2,2
p_101001_3_,par3,2
p_101001_4_,par4,2
p_101006_1_,par1,2
p_101006_2_,par2,2
p_101006_3_,par3,2
p_101006_4_,par4,2
p_101008_1_,par1,2
p_101008_2_,par2,2
p_101008_3_,par3,2
p_101008_4_,par4,2
p_101009_0_,par0GuiScreenOnlineServers,2
p_101009_1_,par1,2
p_101009_2_,par2,2
p_101009_3_,par3,2
p_101009_4_,par4,2
p_101012_0_,par0GuiScreenOnlineServers,2
p_101012_1_,par1,2
p_101012_2_,par2,2
p_101012_3_,par3,2
p_101012_4_,par4,2
p_101015_1_,par1Str,2
p_101018_1_,par1List,2
p_102007_1_,par1,2
p_102007_2_,par2ItemStack,2
p_102007_3_,par3,2
p_102008_1_,par1,2
p_102008_2_,par2ItemStack,2
p_102008_3_,par3,2
p_102012_0_,par0Hopper,2
p_102012_1_,par1IInventory,2
p_102012_2_,par2,2
p_102012_3_,par3,2
p_102013_0_,par0IInventory,2
p_102013_1_,par1ItemStack,2
p_102013_2_,par2,2
p_102013_3_,par3,2
p_102014_0_,par0IInventory,2
p_102014_1_,par1ItemStack,2
p_102014_2_,par2,2
p_102014_3_,par3,2
p_102015_0_,par0IInventory,2
p_102015_1_,par1ItemStack,2
p_102015_2_,par2,2
p_102015_3_,par3,2
p_102018_1_,par1,2
p_102021_1_,par1List,2
p_102021_2_,par2,2
p_102021_3_,par3,2
p_102023_1_,par1McoServer,2
p_102023_2_,par2McoServer,2
p_102026_1_,par1Block,2
p_102026_2_,par2,2
p_102027_1_,par1Block,2
p_102027_2_,par2,2
p_102027_3_,par3,2
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
@@ -650,7 +800,6 @@ p_71754_2_,par2Str,2
p_71761_1_,par1InetAddress,2
p_71764_1_,par1NetLoginHandler,2
p_71769_1_,par1InetAddress,2
p_71770_0_,par0InetAddress,2
p_71789_1_,par1,2
p_71790_1_,par1ArrayOfByte,2
p_71790_2_,par2,2
@@ -7221,12 +7370,9 @@ p_94103_1_,par1,2
p_94107_1_,par1,2
p_94114_1_,par1ItemStack,2
p_94114_2_,par2ItemStack,2
p_94115_1_,par1IInventory,2
p_94115_2_,par2,2
p_94117_1_,par1IInventory,2
p_94117_2_,par2ItemStack,2
p_94117_3_,par3,2
p_94127_1_,par1,2
p_94128_1_,par1,2
p_94129_1_,par1Str,2
p_94131_1_,par1Str,2
@@ -7590,31 +7736,11 @@ p_96161_0_,par0GuiScreenOnlineServers,2
p_96165_1_,par1Str,2
p_96165_2_,par2,2
p_96165_3_,par3,2
p_96168_1_,par1,2
p_96168_2_,par2,2
p_96174_1_,par1McoServer,2
p_96175_1_,par1,2
p_96175_2_,par2,2
p_96177_0_,par0GuiScreenOnlineServers,2
p_96179_0_,par0GuiScreenOnlineServers,2
p_96179_1_,par1McoServer,2
p_96182_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
@@ -7703,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
@@ -7712,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
@@ -7901,57 +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_98070_0_,par0GuiScreenOnlineServers,2
p_98070_1_,par1,2
p_98070_2_,par2,2
p_98071_0_,par0GuiScreenOnlineServers,2
p_98072_0_,par0GuiScreenOnlineServers,2
p_98074_0_,par0GuiScreenOnlineServers,2
p_98075_0_,par0GuiScreenOnlineServers,2
p_98076_0_,par0GuiScreenOnlineServers,2
p_98077_0_,par0GuiScreenOnlineServers,2
p_98077_1_,par1,2
p_98077_2_,par2,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_98083_0_,par0GuiScreenOnlineServers,2
p_98083_1_,par1,2
p_98083_2_,par2,2
p_98084_0_,par0GuiScreenOnlineServers,2
p_98085_0_,par0GuiScreenOnlineServers,2
p_98085_1_,par1Str,2
p_98086_1_,par1,2
p_98087_0_,par0GuiScreenOnlineServers,2
p_98088_1_,par1,2
p_98088_2_,par2,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
@@ -7979,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
@@ -8079,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
@@ -8093,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
@@ -8106,13 +8196,6 @@ p_i10013_2_,par2GuiScreen,2
p_i10013_3_,par3McoServer,2
p_i10014_1_,par1GuiScreen,2
p_i10014_2_,par2McoServer,2
p_i10015_1_,par1GuiScreen,2
p_i10015_2_,par2GuiScreen,2
p_i10015_3_,par3McoServer,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
@@ -8214,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
@@ -8346,6 +8428,57 @@ p_i11045_1_,par1Str,2
p_i11046_1_,par1TileEntityMobSpawner,2
p_i20000_1_,par1Session,2
p_i20001_1_,par1Session,2
p_i22000_1_,par1TimerTaskMcoServerListUpdate,2
p_i22000_2_,par2Str,2
p_i22001_1_,par1TimerTaskMcoServerListUpdate,2
p_i22001_2_,par2Str,2
p_i22001_3_,par3McoServerListINNER1,2
p_i22002_1_,par1GuiScreen,2
p_i22002_2_,par2GuiScreenConfigureWorld,2
p_i22002_3_,par3McoServer,2
p_i22003_1_,par1EntityLiving,2
p_i22003_2_,par2PotionEffect,2
p_i22004_1_,par1EntityLiving,2
p_i22004_2_,par2PotionEffect,2
p_i22005_1_,par1EntityLiving,2
p_i22005_2_,par2PotionEffect,2
p_i22006_1_,par1EntityLiving,2
p_i22006_2_,par2PotionEffect,2
p_i22007_1_,par1EntityLiving,2
p_i22007_2_,par2PotionEffect,2
p_i22008_1_,par1EntityLiving,2
p_i22008_2_,par2PotionEffect,2
p_i22009_1_,par1World,2
p_i22009_2_,par2,2
p_i22009_3_,par3,2
p_i22009_4_,par4,2
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
@@ -8551,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
@@ -9976,13 +10106,6 @@ p_i3738_3_,par3,2
p_i3739_1_,par1Str,2
p_i3739_2_,par2,2
p_i3739_3_,par3,2
p_i3740_1_,par1World,2
p_i3740_2_,par2,2
p_i3740_3_,par3,2
p_i3740_4_,par4,2
p_i3740_5_,par5,2
p_i3740_6_,par6,2
p_i3740_7_,par7,2
p_i3741_1_,par1,2
p_i3741_2_,par2,2
p_i3741_3_,par3,2
1 param name side
p_100001_0_ par0 2
p_100003_1_ par1 2
2 p_100006_1_ par1Str 2
3 p_100006_2_ par2Str 2
4 p_100009_0_ par0 2
5 p_100012_1_ par1 2
6 p_100014_0_ par0McoServerList 2
7 p_100015_0_ par0KeyBinding 2
8 p_101000_0_ par0GuiScreenOnlineServers 2
9 p_101001_1_ par1 2
10 p_101001_2_ par2 2
11 p_101001_3_ par3 2
12 p_101001_4_ par4 2
13 p_101006_1_ par1 2
14 p_101006_2_ par2 2
15 p_101006_3_ par3 2
16 p_101006_4_ par4 2
17 p_101008_1_ par1 2
18 p_101008_2_ par2 2
19 p_101008_3_ par3 2
20 p_101008_4_ par4 2
21 p_101009_0_ par0GuiScreenOnlineServers 2
22 p_101009_1_ par1 2
23 p_101009_2_ par2 2
24 p_101009_3_ par3 2
25 p_101009_4_ par4 2
26 p_101012_0_ par0GuiScreenOnlineServers 2
27 p_101012_1_ par1 2
28 p_101012_2_ par2 2
29 p_101012_3_ par3 2
30 p_101012_4_ par4 2
31 p_101015_1_ par1Str 2
32 p_101018_1_ par1List 2
33 p_102007_1_ par1 2
34 p_102007_2_ par2ItemStack 2
35 p_102007_3_ par3 2
36 p_102008_1_ par1 2
37 p_102008_2_ par2ItemStack 2
38 p_102008_3_ par3 2
39 p_102012_0_ par0Hopper 2
40 p_102012_1_ par1IInventory 2
41 p_102012_2_ par2 2
42 p_102012_3_ par3 2
43 p_102013_0_ par0IInventory 2
44 p_102013_1_ par1ItemStack 2
45 p_102013_2_ par2 2
46 p_102013_3_ par3 2
47 p_102014_0_ par0IInventory 2
48 p_102014_1_ par1ItemStack 2
49 p_102014_2_ par2 2
50 p_102014_3_ par3 2
51 p_102015_0_ par0IInventory 2
52 p_102015_1_ par1ItemStack 2
53 p_102015_2_ par2 2
54 p_102015_3_ par3 2
55 p_102018_1_ par1 2
56 p_102021_1_ par1List 2
57 p_102021_2_ par2 2
58 p_102021_3_ par3 2
59 p_102023_1_ par1McoServer 2
60 p_102023_2_ par2McoServer 2
61 p_102026_1_ par1Block 2
62 p_102026_2_ par2 2
63 p_102027_1_ par1Block 2
64 p_102027_2_ par2 2
65 p_102027_3_ par3 2
66 p_102027_4_ par4 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
800 p_71761_1_ par1InetAddress 2
801 p_71764_1_ par1NetLoginHandler 2
802 p_71769_1_ par1InetAddress 2
p_71770_0_ par0InetAddress 2
803 p_71789_1_ par1 2
804 p_71790_1_ par1ArrayOfByte 2
805 p_71790_2_ par2 2
7370 p_94107_1_ par1 2
7371 p_94114_1_ par1ItemStack 2
7372 p_94114_2_ par2ItemStack 2
p_94115_1_ par1IInventory 2
p_94115_2_ par2 2
7373 p_94117_1_ par1IInventory 2
7374 p_94117_2_ par2ItemStack 2
7375 p_94117_3_ par3 2
p_94127_1_ par1 2
7376 p_94128_1_ par1 2
7377 p_94129_1_ par1Str 2
7378 p_94131_1_ par1Str 2
7736 p_96165_1_ par1Str 2
7737 p_96165_2_ par2 2
7738 p_96165_3_ par3 2
p_96168_1_ par1 2
p_96168_2_ par2 2
7739 p_96174_1_ par1McoServer 2
p_96175_1_ par1 2
p_96175_2_ par2 2
7740 p_96177_0_ par0GuiScreenOnlineServers 2
p_96179_0_ par0GuiScreenOnlineServers 2
p_96179_1_ par1McoServer 2
p_96182_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
p_98070_0_ par0GuiScreenOnlineServers 2
p_98070_1_ par1 2
p_98070_2_ par2 2
p_98071_0_ par0GuiScreenOnlineServers 2
8039 p_98072_0_ par0GuiScreenOnlineServers 2
p_98074_0_ par0GuiScreenOnlineServers 2
8040 p_98075_0_ par0GuiScreenOnlineServers 2
8041 p_98076_0_ par0GuiScreenOnlineServers 2
p_98077_0_ par0GuiScreenOnlineServers 2
p_98077_1_ par1 2
p_98077_2_ par2 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_98083_0_ par0GuiScreenOnlineServers 2
p_98083_1_ par1 2
p_98083_2_ par2 2
p_98084_0_ par0GuiScreenOnlineServers 2
p_98085_0_ par0GuiScreenOnlineServers 2
p_98085_1_ par1Str 2
8046 p_98086_1_ par1 2
p_98087_0_ par0GuiScreenOnlineServers 2
p_98088_1_ par1 2
p_98088_2_ par2 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_i10015_1_ par1GuiScreen 2
p_i10015_2_ par2GuiScreen 2
p_i10015_3_ par3McoServer 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
8428 p_i11046_1_ par1TileEntityMobSpawner 2
8429 p_i20000_1_ par1Session 2
8430 p_i20001_1_ par1Session 2
8431 p_i22000_1_ par1TimerTaskMcoServerListUpdate 2
8432 p_i22000_2_ par2Str 2
8433 p_i22001_1_ par1TimerTaskMcoServerListUpdate 2
8434 p_i22001_2_ par2Str 2
8435 p_i22001_3_ par3McoServerListINNER1 2
8436 p_i22002_1_ par1GuiScreen 2
8437 p_i22002_2_ par2GuiScreenConfigureWorld 2
8438 p_i22002_3_ par3McoServer 2
8439 p_i22003_1_ par1EntityLiving 2
8440 p_i22003_2_ par2PotionEffect 2
8441 p_i22004_1_ par1EntityLiving 2
8442 p_i22004_2_ par2PotionEffect 2
8443 p_i22005_1_ par1EntityLiving 2
8444 p_i22005_2_ par2PotionEffect 2
8445 p_i22006_1_ par1EntityLiving 2
8446 p_i22006_2_ par2PotionEffect 2
8447 p_i22007_1_ par1EntityLiving 2
8448 p_i22007_2_ par2PotionEffect 2
8449 p_i22008_1_ par1EntityLiving 2
8450 p_i22008_2_ par2PotionEffect 2
8451 p_i22009_1_ par1World 2
8452 p_i22009_2_ par2 2
8453 p_i22009_3_ par3 2
8454 p_i22009_4_ par4 2
8455 p_i22009_5_ par5 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
10106 p_i3739_1_ par1Str 2
10107 p_i3739_2_ par2 2
10108 p_i3739_3_ par3 2
p_i3740_1_ par1World 2
p_i3740_2_ par2 2
p_i3740_3_ par3 2
p_i3740_4_ par4 2
p_i3740_5_ par5 2
p_i3740_6_ par6 2
p_i3740_7_ par7 2
10109 p_i3741_1_ par1 2
10110 p_i3741_2_ par2 2
10111 p_i3741_3_ par3 2
Loaded 100 of 163 files, more files were not shown because too many files have changed in this diff. Show more