Compare commits

...
399 Commits
Author SHA1 Message Date
Christian 24ec338a51 Fix license and naming 2013-11-09 14:28:54 -05:00
AbrarSyed 4f634855ac added src distribution gradle file 2013-11-09 14:28:54 -05:00
Lex Manos 9f01e3407e Move to install to not clutter root directory with the .bat and .sh files I know are coming. 2013-11-09 14:28:54 -05:00
Lex Manos adeaeb74aa Include eclipse template workspace, for packaging in src distro. 2013-11-09 14:28:54 -05:00
Lex Manos e13c3966e0 Add gradle wrapper 2013-11-09 14:28:53 -05:00
Lex Manos 02c3b4e74b Publish to repo folder for local testing. 2013-11-09 14:28:53 -05:00
AbrarSyed 89a07d3668 Step 3: The Rebirth 2013-11-09 14:28:53 -05:00
Lex Manos b52eb6d699 Step 2: The Reformation 2013-11-09 14:28:53 -05:00
AbrarSyed 3281faf2be Step 1: The Purge 2013-11-09 14:28:53 -05:00
Christian 3d25b4e793 Add in the ability to strip interface references for specific interfaces - this is probably mostly useful for
scala scenarios where sythetic methods are generated and is not a substitute for using Optional.Method where appropriate.
Closes #300
2013-11-09 14:27:15 -05:00
Christian f4532410ec Change a couple of warnings, as a prelude to 1.7- preinit is now required for all GameRegistry activity, and every item and block REQUIRES registration. 2013-11-06 16:18:41 -05:00
Christian 8f87021b0f Fix derp with custom properties. They work now! 2013-11-05 22:23:24 -05:00
Christian bc57ff9e83 Fix recursive API dependency resolution. Allows nested APIs, such as BuildCraft's 2013-10-31 09:39:34 -04:00
Christian de8ab934d8 Fix up duplicate entries 2013-10-30 22:46:19 -04:00
Christian 81fe1c9682 Add in an API marker for API type packages.
This does several things:
1. Packages marked as API will generate a new "modid" (the provides) that can be depended on.
2. Packages marked as API will be searched systemwide, and anything declaring that package (even without the API marker)
will get an implicit dependency on the API package.
3. The API package itself will get a soft dependency on the "owner" package.

@Optional elements can refer to the API packages instead of a concrete mod as well.
2013-10-30 22:20:28 -04:00
Christian 58a299aabc Attempt to inject coremods as tweakers, so both can share a dependency ordering 2013-10-27 13:28:50 -04:00
Christian 243a21a353 Wrapping coremods as tweakers. Part 1. 2013-10-20 11:53:07 +02:00
Christian f0dc530b28 Fix up documentation of VersionCheckHandler - it only ever accepted a String and only works on the NetworkMod annotated class 2013-10-20 11:45:00 +02:00
Christian dac7f590ea Modify ordering of networkmod registration and mod instantiation. This fixes VersionCheckHandler logging an incorrect failure message due
to NPE.
2013-10-20 11:41:28 +02:00
Lex Manos bf54d4d667 Make each mod's EventBus log a child of it's main logger. 2013-10-19 18:24:24 -07:00
Christian da4337efbf Fix up handling the new method signature data for NetworkCheckHandlers 2013-10-14 21:28:15 -04:00
Christian f92962bbbb Use null to empty, so missing values work. *sigh* 2013-10-13 22:36:47 -04:00
Christian 2714da1022 Primitive capability for tweakers to order. Add a "TweakOrder" integer
property to your manifest, or accept the default of zero.
2013-10-12 10:28:11 -04:00
LexManos 96be82343c Merge pull request #280 from mc10/patch-1
Very minor style fixes
2013-10-09 20:56:05 -07:00
Kevin Ji 58577775d2 Very minor style fixes
Replacing tabs with spaces consistently, making brace styles consistent, etc.
2013-10-09 19:53:50 -07:00
Christian fc3e7647d2 Support, and fix up, interface lists for Optional 2013-10-09 13:58:14 -04:00
Lex Manos a381874bb9 Delay sound system backend initalization to speed up startup and prevent race condition on some computers. 2013-10-06 11:13:07 -07:00
Christian 55525f6d2e ModLoader is officially deprecated. It will all cease to be with 1.7. 2013-10-06 11:06:31 -04:00
Christian bc64ceabef Optional shouldn't be constructable itself. It's purely a wrapper thing. 2013-10-06 10:56:47 -04:00
Christian 63ba3aa009 Add in support for Optional interfaces and methods. Be gone coremods! 2013-10-04 17:20:05 -04:00
Christian 5265e34a35 Fix null killing the server 2013-09-29 15:51:38 -04:00
Lex Manos 35ab9f52b0 Fix md5s for new checksums.sha1 in scala libraries. 2013-09-28 19:47:32 -07:00
Christian 9b55f1f48f Attempt at a shared modlist implementation - should allow visibility between liteloader and fml for "mod list display" 2013-09-27 10:45:20 -04:00
Christian e356f4d713 Cross-modsystem compatibility fix with thanks to Mumfrey @ liteloader 2013-09-27 10:01:39 -04:00
Christian bfc25bc5da Add to both the classloader and the parent 2013-09-26 13:01:00 -04:00
Christian 9f0f9e7288 Fix deobf tweaker 2013-09-26 10:11:29 -04:00
Christian ce6404fd5b TYPOS!!! 2013-09-26 09:33:48 -04:00
Christian 8f18a3de9a Separate deobf tweaker so it runs last. Should fix problems with cascaded tweakers
expecting an obf environment.
2013-09-26 09:23:25 -04:00
Christian 9815d8c379 Update for launchwrapper 1.8 2013-09-25 16:40:59 -04:00
Christian 1d902df581 Use the negative cache in latest legacylauncher. 2013-09-25 11:46:11 -04:00
Christian 8e26c99de3 Add debugging for deobfuscation
Add negative caching for field and method maps. Should shortcut some work

Fix handling the case where a class doesn't exist, but still needs deobf

Ask the patch manager for the bytes for the class, not the classLoader

Fix up some more places where we should look for a patched class

Fix problem with empty source classes and runtime deobfuscation
2013-09-25 07:37:25 -04:00
Lex Manos fc8c3bef03 Update to new installer that uses xz compression and better support for non-standard jvms 2013-09-24 23:21:17 -07:00
Christian a4de22c1ad And use the parent that's actually going to be valid. *sigh* 2013-09-24 08:42:13 -04:00
Christian 70cffe6982 Herpaderp. Make addURL accessible. *sigh* 2013-09-24 07:33:11 -04:00
Christian 39620f1e41 Fix injection of tweaker into system 2013-09-23 13:33:16 -04:00
cpw 0e80fcb8f7 Merge pull request #284 from smcv/uninit
Fix NPE when loading second single-player world
2013-09-22 18:24:56 -07:00
Simon McVittie 4a94c2c71b Fix NPE when loading second single-player world
After leaving a single-player world, getServer() can return null, resulting
in the stack trace below, "Fatal errors were detected during the
transition from SERVER_STOPPING to SERVER_ABOUT_TO_START",
"The ForgeModLoader state engine has become corrupted" and the client
getting stuck forever.

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

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

Conflicts:
	client/cpw/mods/fml/client/GuiModList.java
2013-03-09 11:12:12 -05:00
cpw fe1623a36a Merge pull request #195 from RainWarrior/snapshot15
Fixes GameRegistry.registerBlock
2013-03-09 07:07:48 -08:00
RainWarrior 889efc1c0a Fixes GameRegistry.registerBlock 2013-03-09 14:06:12 +04:00
Christian 0419b9d975 Update MCP info for latest 2013-03-08 23:14:30 -05:00
Christian f1c6bdd57d Support the MCP format of partial reobfuscation for portability. Ensure modloader-like compatibility 2013-03-08 23:13:39 -05:00
LexManos b3e854a15d Update for new MCP with srg reobf. 2013-03-08 18:11:44 -08:00
Christian 80a40c03e6 Update to MCP 1.5 and minecraft 1.5. 2013-03-08 20:36:05 -05:00
Christian 5bfaf7c170 Global object registry, also, support the new itemblockwithmetadata constructor 2013-03-08 13:17:12 -05:00
Christian 2d98835db8 Scala support!
It's still primitive, I hope that people will like it. I do :)
2013-03-07 20:22:24 -05:00
Christian 81c6421f84 Tweak license text- any osi licensed project can use the asm transformer code 2013-03-07 19:41:52 -05:00
Christian 6eeae8c49f Fix up state transition derp when the server crashes with an error- it shouldn't double-derp 2013-03-07 19:37:52 -05:00
Christian c42a210140 Strip deprecated code 2013-03-07 19:33:34 -05:00
Christian a723aa6860 Refresh copyright notices on everything 2013-03-07 19:25:48 -05:00
Christian e9ff699c2d Refresh the renderengine after modloading is complete. Should fix issues with out-of-place texture registration by mods. 2013-03-07 19:02:26 -05:00
Christian abe4f73a9a FIX massive performance issue with FML. Thanks to @sfPlayer1 for finding
this epic derp on my part!
2013-03-06 14:00:28 -05:00
Christian 74fffc6fdc Update next render to 40 2013-03-04 22:52:24 -05:00
Christian debbdc00be Capture Minecraft logs into FML logging 2013-03-04 22:45:58 -05:00
LexManos aed2cc446a Force file name encoding to UTF-8, caused different zips on different systems. 2013-03-04 18:19:06 -08:00
LexManos e74087ee43 Ignore again, testing submodule. 2013-03-03 11:54:53 -08:00
LexManos f329084f1f Ignore this commit. 2013-03-03 11:52:47 -08:00
Christian 33cd9ad0fe Ignore deobf data 2013-03-03 14:04:41 -05:00
Christian ce819ac143 Force the joined.srg timestamp to zero- avoids annoying sha1 differences 2013-03-02 15:06:13 -05:00
Christian f0495a8abc Don't enforce signatures on minecraft classes 2013-03-02 14:48:08 -05:00
Christian a696db5a21 Update MCP URL for snapshot 2013-03-02 10:56:25 -05:00
Christian fcdbb4f5b3 Fix up runtime deobfuscation. Working well now. 2013-03-02 10:46:32 -05:00
Christian e105337ff4 Build, and use, MC versioned deobfuscation data 2013-03-02 10:30:45 -05:00
Christian f52e2112dd Merge branch 'runtimedeobf' into snapshot15 2013-03-02 10:04:06 -05:00
Christian 945d927fa0 Add in build for deobf data zip file, update for official mcp 7.39 2013-03-02 10:02:02 -05:00
LexManos 2ee6946824 Fix exc for renamed Behavior classes. 2013-03-02 00:48:44 -08:00
LexManos e08c43366a Actually remove classes from the csv when removed, and moved All EntityMinecart entities to net.minecraft.entity.item 2013-03-02 00:12:31 -08:00
LexManos c508004429 Delete unneeded patch 2013-03-02 00:11:48 -08:00
LexManos 21af85323a Readd ignore for argo and bouncycastle, needed for our replacement to work properly. 2013-03-02 00:11:33 -08:00
Christian 3410242f03 Update FML to 1.5 snapshot 13w09c 2013-03-02 02:06:32 -05:00
Christian 9b9c46d93b Tweaks to runtime deobf 2013-03-02 01:49:45 -05:00
LexManos de8e76c7fd Update distribuited eclipse's classpath for updated libraries. 2013-02-28 04:22:34 -08:00
LexManos 47b5e99b6f Fix crash in GuiModList for mod logo files, logo is not rendering for unknow reason. 2013-02-27 22:41:00 -08:00
LexManos 1a465b33f5 Fix bug in rename_vars where certian items would fail to be renamed. 2013-02-27 22:40:15 -08:00
LexManos 8e7956397d Just enable server side compile, and warn not to cmplain to us. 2013-02-26 14:54:18 -08:00
LexManos 86a9c7d359 Fixup reobfusication of server code if present. 2013-02-26 14:34:51 -08:00
Christian 6a581803a9 Tweak IASM hook api. You can return multiple classes now. 2013-02-26 15:04:45 -05:00
Christian b4e0c709c5 Merge branch 'runtimedeobf' into snapshot15 2013-02-26 10:24:03 -05:00
Christian f3458456a2 Change readFully to actually read a bunch of bytes at once now. Thanks to nallar and aartbluestoke for the suggestion to
revisit this..
2013-02-26 01:07:14 -05:00
Christian dcb15a587c Clean up more junk 2013-02-26 00:28:12 -05:00
Christian 937e9a0169 Update libs for 1.5. Lots of new libs. 2013-02-26 00:16:57 -05:00
Christian decd230ac1 Fix renderengine patch *sigh* 2013-02-25 22:06:20 -05:00
Christian 5347caa1c4 Merge branch 'master' into snapshot15
Conflicts:
	patches/minecraft/net/minecraft/client/renderer/RenderEngine.java.patch
2013-02-25 21:53:56 -05:00
Christian 52f6a674ea Merge branch 'master' into snapshot15
Conflicts:
	client/cpw/mods/fml/client/TextureFXManager.java
2013-02-25 21:18:08 -05:00
cpw a16c61f7ba Merge pull request #188 from immibis/master
Console log thread should be a daemon thread.
2013-02-22 22:35:14 -08:00
immibis 67f12d6dec Console log thread should be a daemon thread. 2013-02-23 19:27:16 +13:00
LexManos bad55cacfa Fix sprite map issue. 2013-02-22 14:45:25 -08:00
Christian a6e979b311 Merge branch 'master' into runtimedeobf 2013-02-17 16:29:13 -05:00
Christian ce68456f97 Fix Language Registry, closes #163 2013-02-17 16:28:54 -05:00
Christian 29e59438c5 Fix Language Registry, closes #163 2013-02-17 16:22:58 -05:00
Christian 10d4acfad2 Merge branch 'master' into runtimedeobf 2013-02-16 14:28:29 -05:00
LexManos 1c3dc132cb Option to disable renaming for srgnames. 2013-02-08 14:50:17 -08:00
Christian cd96718339 Fix HD mob skins, FINALLY!!!
Stupid eyes are stupid.
2013-02-06 01:25:46 -05:00
Christian 22dbe411d9 Fix up mistake that broke all modloading. Nice. 2013-02-04 10:58:48 -05:00
Christian a99d110fff Fix some class naming and packaging issues, pending an MCP update
for the same
2013-02-02 10:54:48 -05:00
Christian f21929b7d1 Update for MCP 7.34 and MC 13w05b 2013-02-01 23:05:23 -05:00
Christian 5d78b310da MCP compilation works 2013-02-01 22:42:28 -05:00
Christian 549b6fd535 IMC tweaks: runtimeMessages now work (thanks for all that testing for this much requested feature!)
and IMCEvent will no longer remove messages if no one gets them, so you can do
just manual runtime polling, if you wish.
2013-01-31 13:39:53 -05:00
Christian 9fafdc1695 More logging tweaks. You can probably configure individual mod log files if you wish now 2013-01-30 20:55:12 -05:00
Christian f169f7c92f A log of logging cleanup. FML will now read logging.properties to configure logging channels a couple of times during startup.
You should be able to filter a lot of messages based on things like modid and certain FML related features that can be noisy
like item tracking.
Should close #175
2013-01-30 18:57:21 -05:00
Christian b9ccadb2f1 Final part of the deobfuscation data setup- fields are now deobfuscated as well.
All that remains, is to figure out what and how to distribute the deobfuscation data itself.
2013-01-28 17:48:44 -05:00
Christian f00650481b Read the joined.srg file directly from lib/deobfuscation_data.zip now. Still debating distribution method. 2013-01-28 17:39:22 -05:00
Christian 5d4c2fed88 Now actually works for mods, somewhat. It currently generates access violations for
ModLoader mods that presume access to fields that are not actually accessible from
a different package.
2013-01-27 22:42:36 -05:00
Christian 66a81e7dbe Method deobfuscation now works 2013-01-27 21:50:08 -05:00
Christian 6b5a433f65 Working to read class names and remap them at runtime. 2013-01-27 17:09:00 -05:00
Christian b5d5c95b33 First draft runtime deobf 2013-01-27 15:55:37 -05:00
Christian 3ac891fa5a Try and handle "death on startup" a bit cleaner 2013-01-27 15:54:36 -05:00
Christian 2dc0189179 Deprecate the old GUI ticktype. They're dead and have been for some time. 2013-01-24 17:29:46 -05:00
Christian dd98784262 Tweak a method signature 2013-01-24 10:23:36 -05:00
LexManos 1c9a51098b Add parameters to FML install to enable/disable certian aspects. Applying patches, running transformer/merger, and decompiling server. 2013-01-24 03:08:19 -08:00
Christian d075daf00e Merge branch 'master' into snapshot15
Fix up compilation and patching errors

Conflicts:
	common/cpw/mods/fml/common/registry/GameRegistry.java
	conf/joined.srg
	conf/params.csv
	conf/version.cfg
	patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch
2013-01-22 15:21:22 -05:00
Christian 1bd6847bc8 Fix up packages.csv ordering for easier diffing 2013-01-22 14:43:27 -05:00
Christian dd832f2a88 Update for MCP7.30c - fixes redstone rendering issues 2013-01-22 14:40:09 -05:00
Christian aebf6eb168 Add in a registry method to allow for alternative TileEntity names- they will be used to support
loading maps containing the older definitions.
2013-01-22 13:11:32 -05:00
Christian 8921cfe061 Remember to add the new patches! 2013-01-22 09:32:53 -05:00
Christian cd67596d57 The "ServerStarting" event should now properly crash the server if it fails,
so the client will properly exit. Also, added in a "pre-server-start" event
that fires before the worlds are loaded for a save, just for you immibis.
2013-01-22 09:17:04 -05:00
Christian e1c6630569 Javadoc cleanup 2013-01-21 21:37:29 -05:00
Christian 5ce4e31855 Fix breaking change 2013-01-20 17:54:56 -05:00
Christian a99c488d49 Merge branch 'patch-1' of https://github.com/bspkrs/FML into gh-updates 2013-01-20 11:31:47 -05:00
Christian 94282c5575 Merge branch 'FMLLogFormatter' of https://github.com/donington/FML into gh-updates 2013-01-20 11:31:24 -05:00
Christian 7ad8529390 Update MCP to MCP7.26a and refresh MCP names 2013-01-20 10:30:36 -05:00
Christian 15534edce4 Update address of the FML repository to the new location in all the files 2013-01-18 21:26:43 -05:00
bspkrs aa822e32af Fix logical error in comment text 2013-01-16 23:49:09 -05:00
Christian a14ab913a9 Update license text to make clear that FML is not a way to sidestep
MCP licensing.
2013-01-15 16:54:26 -05:00
Christian 0165742a30 Fix mcp conf md5 signatures for the snapshot 2013-01-12 14:25:03 -05:00
donington 26a5b316de FMLLogFormatter: dynamic log level name
FMLLogFormatter now uses getLocalizedName or getName for log level name

Changes to be committed:
	modified:   common/cpw/mods/fml/relauncher/FMLLogFormatter.java
2013-01-12 00:42:36 -05: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
434 changed files with 48922 additions and 45644 deletions

No files matched your search

+4
View File
@@ -1,9 +1,13 @@
* text eol=lf
*.bat text eol=crlf
*.patch text eol=lf
*.java text eol=lf
*.gradle text eol=crlf
*.png binary
*.exe binary
*.dll binary
*.jar binary
*.lzma binary
*.zip binary
*.pyd binary
*.cfg text eol=lf
+15 -12
View File
@@ -1,13 +1,16 @@
#eclipse
/bin
/minecraft_server
/mods
/fmlbuild.properties
/fmlversion.properties
/difflist.txt
/target
fmlbranding.properties
/fernflower.zip
/commands.py.bck
/mcp*.zip
/mcp
/eclipse
/.settings
/.classpath
#idea
/.idea
*.iml
#gradle
/build
/.gradle
#occupational hazards
/eclipse/
/repo/
+27
View File
@@ -0,0 +1,27 @@
This is Forge Mod Loader.
You can find the source code at all times at https://github.com/MinecraftForge/FML
This minecraft mod is a clean open source implementation of a mod loader for
minecraft servers, minecraft bukkit servers, and minecraft clients.
The code is authored by cpw.
It (partially) implements API defined by the client side ModLoader, authored by Risugami.
http://www.minecraftforum.net/topic/75440-
It also contains suggestions and hints and generous helpings of code from LexManos, author of MinecraftForge.
http://www.minecraftforge.net/
Additionally, it contains an implementation of topological sort based on that
published at http://keithschwarz.com/interesting/code/?dir=topological-sort
It also contains code from the Maven project for performing versioned dependency
resolution. http://maven.apache.org/
It also contains a partial repackaging of the javaxdelta library from http://sourceforge.net/projects/javaxdelta/
with credit to it's authors.
Forge Mod Loader downloads components from the Minecraft Coder Pack
(http://mcp.ocean-labs.de/index.php/Main_Page) with kind permission from the MCP team.
+27 -3
View File
@@ -1,7 +1,7 @@
This minecraft mod, Forge Mod Loader, including all parts herein, is licensed
under the GNU LGPL v2.1 or later.
This minecraft mod, Forge Mod Loader, including all parts herein except as noted below,
is licensed under the GNU LGPL v2.1 or later.
Homepage: https://github.com/cpw/FML
Homepage: https://github.com/MinecraftForge/FML
This software includes portions from the Apache Maven project at
http://maven.apache.org/ specifically the ComparableVersion.java code. It is
@@ -9,6 +9,30 @@ 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
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)
========
GNU LESSER GENERAL PUBLIC LICENSE
+11 -14
View File
@@ -1,6 +1,6 @@
This is Forge Mod Loader, or FML for short, by cpw.
More information can be found at https://github.com/cpw/FML/wiki
More information can be found at https://github.com/MinecraftForge/FML/wiki
It is a clean reimplementation of a mod loading system for client, server and
bukkit use, incorporating API implementations of client side ModLoader by
@@ -40,8 +40,8 @@ contributors through github.
Notable integrations
====================
Optifine, with the Cx series have started performing the actions necessary for
FML compatibility. This means optifine will work well alongside an FML or
Optifine has FML compatibility. It varies from Optifine release to release, however
in general it will work well alongside an FML or
Minecraft Forge installation. FML will detect and ensure the good operation of
Optifine (you can see it in your client as an additional data line on the
bottom left).
@@ -49,9 +49,8 @@ bottom left).
Client notes
============
FML does provide a standard pattern for mods to provide HD textures. This is why
optifine needed integration code. FML supports very very basic HD texture packs
up to 128x resolution (some 256x resolution packs work but not all). For full
featured HD optifine is recommended.
optifine needed integration code. FML supports HD texture packs
up to 128x resolution.
Mod information
===============
@@ -68,15 +67,13 @@ or server):
Installation
============
To install this on it's own into a minecraft environment, simply copy the
contents of the fml zip file into the minecraft jar file, using your preferred
zip management tool (I recommend 7 zip on windows).
To install on a server, simply execute the FML or Forge jar file, with a copy of
minecraft_server.jar placed in the same directory. FML will launch it's patched
copy.
For servers: the minecraft jar file is minecraft_server.jar.
For clients: the minecraft jar file is minecraft.jar. You will additionally need
to delete the "META-INF" folder in the minecraft.jar file.
For bukkit: the mcportcentral custom builds of craftbukkit contain all you need
already. Please refer to mcportcentral.co.za for more information.
To install on a client, FIRST delete META-INF from the minecraft.jar file, then
copy the contents of the FML or Forge jar file into it. FML and Forge provide
their own META-INF data which should *not* be deleted.
Forge Installation
==================
-14
View File
@@ -1,14 +0,0 @@
import os, sys
def main():
fml_dir = os.path.abspath(sys.argv[1])
work_dir = os.path.normpath(sys.argv[2])
mcp_dir = os.path.normpath(sys.argv[3])
sys.path.append(os.path.join(fml_dir, 'install'))
from fml import apply_fml_patches
apply_fml_patches(fml_dir, mcp_dir, work_dir, False)
if __name__ == '__main__':
main()
+106
View File
@@ -0,0 +1,106 @@
buildscript {
repositories {
mavenCentral()
maven {
name = "forge"
url = "http://files.minecraftforge.net/maven"
}
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:1.0-SNAPSHOT'
}
}
import static net.minecraftforge.gradle.dev.FmlDevPlugin.*
apply plugin: 'maven'
apply plugin: 'fmldev'
repositories {
flatDir {
name "fileRepo"
dirs "repo"
}
}
minecraft {
version = '1.6.4'
fmlDir = projectDir.getAbsolutePath();
mainClass = 'cpw.mods.fml.relauncher.ServerLaunchWrapper'
installerVersion = "1.4"
}
group = 'cpw.mods'
version = getVersionFromGit(project)
jenkins {
job = 'fml'
}
uploadArchives {
repositories {
if (project.hasProperty("filesmaven")) {
logger.info('Publishing to files server')
mavenDeployer {
configuration = configurations.deployerJars
repository(url: project.filesmaven.url) {
authentication(userName: project.filesmaven.username, privateKey: project.filesmaven.key)
}
pom {
groupId = project.group
version = project.version
artifactId = project.archivesBaseName
project {
name project.archivesBaseName
packaging 'jar'
description 'ForgeModLoader'
url 'https://github.com/MinecraftForge/FML'
scm {
url 'https://github.com/MinecraftForge/FML'
connection 'scm:git:git://github.com/MinecraftForge/FML.git'
developerConnection 'scm:git:[email protected]:MinecraftForge/FML.git'
}
issueManagement {
system 'github'
url 'https://github.com/MinecraftForge/FML/issues'
}
licenses {
license {
name 'GNU Lesser Public License (LGPL), Version 2.1'
url 'http://www.gnu.org/licenses/lgpl-2.1.txt'
distribution 'repo'
}
}
developers {
developer {
id 'cpw'
name 'cpw'
roles { role 'developer' }
}
}
developers {
developer {
id 'LexManos'
name 'Lex Manos'
roles { role 'developer' }
}
}
}
}
}
} else {
logger.info('Publishing to repo folder')
mavenDeployer {
repository(url: 'file://localhost/' + project.file('repo').getAbsolutePath())
}
}
}
}
-352
View File
@@ -1,352 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- ======================================================================
30 Mar 2012 13:35:40
FML
The Forge Mod Loader
cpw
====================================================================== -->
<project name="FML" default="jenkinsbuild">
<description>The Forge Mod Loader</description>
<target name="writeversion" depends="buildenvsetup">
<exec executable="${python.exe}" dir="${basedir}" failonerror="true">
<arg value="${basedir}/getversion.py" />
<arg value="${mcp.home}" />
</exec>
<propertyfile file="fmlversion.properties">
<entry key="fmlbuild.build.number" type="int" value="${version.build}"/>
</propertyfile>
</target>
<target name="buildenvsetup">
<tstamp>
<format pattern="yyMMddHHmmss" property="timestamp" />
</tstamp>
<property environment="env" />
<property name="modname" value="fml" />
<condition property="mcp.home" value="${env.WORKSPACE}/mcp" else="${basedir}/mcp">
<isset property="env.WORKSPACE" />
</condition>
<property name="fml.python.dir" location="${basedir}/python" />
<condition property="python.exe" value="${fml.python.dir}/python_fml" else="python">
<os family="Windows" />
</condition>
<condition property="mcp.exists">
<available file="${mcp.home}/runtime/commands.py"/>
</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" />
<property name="client.mcp.srcdir" location="${mcp.srcdir}/minecraft" />
<property name="clean.mcp.srcdir" location="${mcp.home}/src-base" />
<property name="patch.mcp.srcdir" location="${mcp.home}/src-work" />
<property name="tmp.mcp.srcdir" location="${mcp.home}/src-tmp" />
<property name="renamed.mcp.srcdir" location="${mcp.home}/src-renamed" />
<property name="common.src.dir" location="${basedir}/common" />
<property name="client.src.dir" location="${basedir}/client" />
<property name="patch.src.dir" location="${basedir}/patches" />
<property name="fml.conf.dir" location="${basedir}/conf" />
<condition property="version.build" value="${env.BUILD_NUMBER}" else="1">
<isset property="env.BUILD_NUMBER" />
</condition>
<available file="eclipse" property="eclipse.exists"/>
</target>
<target name="makeversion" depends="buildenvsetup">
<antcall target="writeversion" />
<property file="fmlversion.properties" />
<property name="build.number" value="${fmlbuild.major.number}.${fmlbuild.minor.number}.${fmlbuild.revision.number}" />
<property name="version.major" value="${fmlbuild.major.number}" />
<property name="version.minor" value="${fmlbuild.minor.number}" />
<property name="version.rev" value="${fmlbuild.revision.number}" />
<property name="version.minecraft" value="${fmlbuild.mcversion}" />
<property name="version.branch" value="${fmlbuild.branch}" />
<property name="version" value="${version.major}.${version.minor}.${version.rev}.${version.build}" />
</target>
<target name="makeclean" depends="buildenvsetup" if="mcp.exists">
<exec executable="${python.exe}" dir="${mcp.home}">
<arg value="${mcp.home}/runtime/cleanup.py" />
<arg value="-f" />
</exec>
</target>
<target name="clean" depends="buildenvsetup,makeclean" if="mcp.exists">
<exec executable="${python.exe}" dir="${mcp.home}">
<arg value="${basedir}/decompile.py" />
<arg value="${mcp.home}" />
<arg value="${basedir}" />
</exec>
</target>
<target name="reobfuscate" depends="buildenvsetup,recompile">
<exec executable="${python.exe}" dir="${mcp.home}" failonerror="true">
<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>
</fail>
<exec executable="${python.exe}" dir="${mcp.home}">
<arg value="${basedir}/generatechangedfilelist.py"/>
<arg value="${mcp.home}"/>
<arg value="${basedir}/difflist.txt"/>
</exec>
</target>
<target name="recompile" depends="buildenvsetup">
<exec executable="${python.exe}" dir="${mcp.home}" failonerror="true">
<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>
</fail>
</target>
<target name="merge-client" depends="buildenvsetup">
<copy todir="${client.mcp.srcdir}" overwrite="true" verbose="true">
<fileset dir="${client.src.dir}" includes="**/*.java" />
</copy>
</target>
<target name="merge-common">
<copy todir="${client.mcp.srcdir}" overwrite="true" verbose="true">
<fileset dir="${common.src.dir}" includes="**/*.java" />
</copy>
</target>
<target name="merge-source" depends="buildenvsetup,merge-client,merge-common" />
<target name="build-universal" depends="buildenvsetup,merge-client,merge-common,reobfuscate,makeversion">
<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>
<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"/>
</manifest>
<fileset dir="${client.mcp.obfoutput}" includes="**/*.class" excludes="*.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"/>
<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="*.cfg" />
<mappedresources>
<concat>
<fileset dir="${basedir}/install" includes="README.txt" />
<filterchain>
<replacetokens>
<token key="MAJOR" value="${version.major}" />
<token key="MINOR" value="${version.minor}" />
<token key="REV" value="${version.rev}" />
<token key="BUILD" value="${version.build}" />
<token key="MCVERSION" value="${version.minecraft}" />
</replacetokens>
</filterchain>
</concat>
<mergemapper to="README-fml.txt" />
</mappedresources>
</zip>
</target>
<target name="build-source-pack" depends="makeversion">
<property name="srcpack.jarname" value="${modname}-src-${version.minecraft}-${version}-${version.branch}" />
<zip destfile="${basedir}/target/${srcpack.jarname}.zip">
<zipfileset dir="${basedir}" includes="LICENSE-fml.txt,difflist.txt,commands.patch,mcp_merge.cfg,mc_versions.cfg" prefix="fml" />
<zipfileset dir="${common.src.dir}" includes="**/*.java" prefix="fml/common" />
<zipfileset dir="${client.src.dir}" includes="**/*.java" prefix="fml/client" />
<zipfileset dir="${client.src.dir}" includes="mcp.png" prefix="fml/client" />
<zipfileset dir="${basedir}" includes="fmlversion.properties" prefix="fml/common" />
<zipfileset dir="${common.src.dir}" includes="*.cfg" prefix="fml/common" />
<zipfileset dir="${common.src.dir}" includes="mcpmod.info" prefix="fml/common" />
<zipfileset dir="${patch.src.dir}" includes="**/*.patch" prefix="fml/patches" />
<zipfileset dir="${fml.conf.dir}" prefix="fml/conf" />
<zipfileset dir="${fml.python.dir}" prefix="fml/python" />
<mappedresources>
<concat>
<fileset dir="${basedir}/install" includes="README.txt" />
<filterchain>
<replacetokens>
<token key="MAJOR" value="${version.major}" />
<token key="MINOR" value="${version.minor}" />
<token key="REV" value="${version.rev}" />
<token key="BUILD" value="${version.build}" />
<token key="MCVERSION" value="${version.minecraft}" />
</replacetokens>
</filterchain>
</concat>
<mergemapper to="fml/README-fml.txt" />
</mappedresources>
<zipfileset dir="${basedir}/install" excludes="README.txt,fml.pyc" prefix="fml" />
</zip>
</target>
<target name="build" depends="buildenvsetup,merge-client,merge-common,build-universal,build-source-pack" />
<target name="jenkinsbuild" depends="buildenvsetup,jenkinsfmldecompile,patch,build"/>
<target name="patch" depends="buildenvsetup">
<exec executable="${python.exe}" dir="${basedir}">
<arg value="${basedir}/applypatches.py" />
<arg value="${basedir}" />
<arg value="${mcp.srcdir}" />
<arg value="${mcp.home}" />
</exec>
</target>
<target name="setupenvironment" depends="buildenvsetup">
<input message="This will clean the mcp environment at ${mcp.home} and backup any src-work folder there (src-base will be erased). Continue?" validargs="y,n" addproperty="do.continue" />
<condition property="do.not.continue">
<equals arg1="n" arg2="${do.continue}" />
</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"/>
<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}"/>
</move>
<echo>Deleting old patch references at ${clean.mcp.srcdir}</echo>
<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}"/>
</copy>
<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}"/>
</copy>
<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.home}" />
<arg value="${basedir}" />
</exec>
</target>
<target name="jenkinsfmldecompile" depends="buildenvsetup,makeclean">
<exec executable="${python.exe}" dir="${basedir}">
<arg value="${basedir}/decompile.py" />
<arg value="${mcp.home}" />
<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}"/>
</move>
<delete dir="${mcp.srcdir}"/>
<copy todir="${mcp.srcdir}">
<fileset dir="${clean.mcp.srcdir}"/>
</copy>
<antcall target="cleanargo"/>
<antcall target="patch"/>
<copy todir="${patch.mcp.srcdir}">
<fileset dir="${mcp.srcdir}"/>
</copy>
</target>
<target name="repatchclean" depends="buildenvsetup">
<delete dir="${mcp.srcdir}"/>
<copy todir="${mcp.srcdir}">
<fileset dir="${clean.mcp.srcdir}"/>
</copy>
<antcall target="cleanargo"/>
<antcall target="patch"/>
</target>
<target name="cleanargo" depends="buildenvsetup">
<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"/>
</present>
</srcfiles>
<globmapper from="*.java" to="${patch.src.dir}/*.java.patch"/>
</uptodate>
<fail unless="checkUptodate.uptodate">
A patch is out of date. Update your patches!
</fail>
</target>
<target name="updatepatches" depends="buildenvsetup">
<exec executable="${python.exe}" dir="${basedir}">
<arg value="${basedir}/update_patches.py" />
<arg value="${mcp.home}"/>
<arg value="${basedir}"/>
</exec>
</target>
<target name="makeeclipse" depends="buildenvsetup" unless="eclipse.exists">
<echo>
Extracting fresh eclipse workspace to ${basedir}/eclipse
</echo>
<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}"/>
</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}"/>
</copy>
<move todir="${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"/>
</target>
</project>
@@ -1,637 +0,0 @@
/*
* The FML Forge Mod Loader suite. Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.server;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Properties;
import java.util.Random;
import java.util.logging.Logger;
import org.bukkit.Material;
import net.minecraft.server.Block;
import net.minecraft.server.Item;
import net.minecraft.server.LocaleLanguage;
import net.minecraft.server.MLProp;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.BaseMod;
import net.minecraft.server.BiomeBase;
import net.minecraft.server.EntityItem;
import net.minecraft.server.EntityHuman;
import net.minecraft.server.IChunkProvider;
import net.minecraft.server.ICommandListener;
import net.minecraft.server.IInventory;
import net.minecraft.server.ItemStack;
import net.minecraft.server.NetworkManager;
import net.minecraft.server.Packet1Login;
import net.minecraft.server.Packet250CustomPayload;
import net.minecraft.server.Packet3Chat;
import net.minecraft.server.BukkitRegistry;
import net.minecraft.server.SidedProxy;
import net.minecraft.server.World;
import net.minecraft.server.WorldType;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.IFMLSidedHandler;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ModContainer;
import cpw.mods.fml.common.ModMetadata;
import cpw.mods.fml.common.ProxyInjector;
import cpw.mods.fml.common.Side;
import cpw.mods.fml.common.TickType;
import cpw.mods.fml.common.modloader.ModLoaderModContainer;
import cpw.mods.fml.common.modloader.ModProperty;
import cpw.mods.fml.common.registry.FMLRegistry;
/**
* Handles primary communication from hooked code into the system
*
* The FML entry point is {@link #onPreLoad(MinecraftServer)} called from {@link MinecraftServer}
*
* Obfuscated code should focus on this class and other members of the "server" (or "client") code
*
* The actual mod loading is handled at arms length by {@link Loader}
*
* It is expected that a similar class will exist for each target environment: Bukkit and Client side.
*
* It should not be directly modified.
*
* @author cpw
*
*/
public class FMLBukkitHandler implements IFMLSidedHandler
{
/**
* The singleton
*/
private static final FMLBukkitHandler INSTANCE = new FMLBukkitHandler();
/**
* A reference to the server itself
*/
private MinecraftServer server;
/**
* A handy list of the default overworld biomes
*/
private BiomeBase[] defaultOverworldBiomes;
FMLBukkitProfiler profiler;
/**
* Called to start the whole game off from {@link MinecraftServer#startServer}
* @param minecraftServer
*/
public void onPreLoad(MinecraftServer minecraftServer)
{
try
{
Class.forName("BaseModMp", false, getClass().getClassLoader());
MinecraftServer.log.severe(""
+ "Forge Mod Loader has detected that this server has an ModLoaderMP installed alongside Forge Mod Loader.\n"
+ "This will cause a serious problem with compatibility. To protect your worlds, this minecraft server will now shutdown.\n"
+ "You should follow the installation instructions of either Minecraft Forge of Forge Mod Loader and NOT install ModLoaderMP \n"
+ "into the minecraft_server.jar file "
+ "before this server will be allowed to start up.\n\nFailure to do so will simply result in more startup failures.\n\n"
+ "The authors of Minecraft Forge and Forge Mod Loader strongly suggest you talk to your mod's authors and get them to\nupdate their "
+ "requirements. ModLoaderMP is not compatible with Minecraft Forge on the server and they will need to update their mod\n"
+ "for Minecraft Forge and other server compatibility, unless they are Minecraft Forge mods, in which case they already\n"
+ "don't need ModLoaderMP and the mod author simply has failed to update his requirements and should be informed appropriately.\n\n"
+ "The authors of Forge Mod Loader would like to be compatible with ModLoaderMP but it is closed source and owned by SDK.\n"
+ "SDK, the author of ModLoaderMP, has a standing invitation to submit compatibility patches \n"
+ "to the open source community project that is Forge Mod Loader so that this incompatibility doesn't last. \n"
+ "Users who wish to enjoy mods of both types are "
+ "encouraged to request of SDK that he submit a\ncompatibility patch to the Forge Mod Loader project at \n"
+ "http://github.com/cpw/FML.\nPosting on the minecraft forums at\nhttp://www.minecraftforum.net/topic/86765- (the MLMP thread)\n"
+ "may encourage him in this effort. However, I ask that your requests be polite.\n"
+ "Now, the server has to shutdown so you can reinstall your minecraft_server.jar\nproperly, until such time as we can work together.");
throw new RuntimeException(
"This FML based server has detected an installation of ModLoaderMP alongside. This will cause serious compatibility issues, so the server will now shut down.");
}
catch (ClassNotFoundException e)
{
// We're safe. continue
}
server = minecraftServer;
FMLCommonHandler.instance().beginLoading(this);
FMLRegistry.registerRegistry(new BukkitRegistry());
Loader.instance().loadMods();
}
/**
* Called a bit later on during server initialization to finish loading mods
*/
public void onLoadComplete()
{
Loader.instance().initializeMods();
for (Item i : Item.byId) {
if (i!=null && Material.getMaterial(i.id).name().startsWith("X")) {
Material.setMaterialName(i.id, i.l());
}
}
}
public void onWorldLoadTick()
{
FMLCommonHandler.instance().tickStart(EnumSet.of(TickType.WORLDLOAD));
}
/**
* Every tick just before world and other ticks occur
*/
public void onPreWorldTick(World world)
{
FMLCommonHandler.instance().tickStart(EnumSet.of(TickType.WORLD),world);
}
/**
* Every tick just after world and other ticks occur
*/
public void onPostWorldTick(World world)
{
FMLCommonHandler.instance().tickEnd(EnumSet.of(TickType.WORLD), world);
}
/**
* Get the server instance
*
* @return
*/
public MinecraftServer getServer()
{
return server;
}
/**
* Get a handle to the server's logger instance
*/
public Logger getMinecraftLogger()
{
return MinecraftServer.log;
}
/**
* Called from ChunkProviderServer when a chunk needs to be populated
*
* To avoid polluting the worldgen seed, we generate a new random from the world seed and
* generate a seed from that
*
* @param chunkProvider
* @param chunkX
* @param chunkZ
* @param world
* @param generator
*/
public void onChunkPopulate(IChunkProvider chunkProvider, int chunkX, int chunkZ, World world, IChunkProvider generator)
{
FMLCommonHandler.instance().handleWorldGeneration(chunkX, chunkZ, world.getSeed(), world, generator, chunkProvider);
}
/**
* Called from the furnace to lookup fuel values
*
* @param itemId
* @param itemDamage
* @return
*/
public int fuelLookup(int itemId, int itemDamage)
{
int fv = 0;
for (ModContainer mod : Loader.getModList())
{
fv = Math.max(fv, mod.lookupFuelValue(itemId, itemDamage));
}
return fv;
}
/**
* Is the offered class and instance of BaseMod and therefore a ModLoader mod?
*/
public boolean isModLoaderMod(Class<?> clazz)
{
return BaseMod.class.isAssignableFrom(clazz);
}
/**
* Load the supplied mod class into a mod container
*/
public ModContainer loadBaseModMod(Class<?> clazz, File canonicalFile)
{
@SuppressWarnings("unchecked")
Class <? extends BaseMod > bmClazz = (Class <? extends BaseMod >) clazz;
return new ModLoaderModContainer(bmClazz, canonicalFile);
}
/**
* Called to notify that an item was picked up from the world
*
* @param entityItem
* @param entityPlayer
*/
public void notifyItemPickup(EntityItem entityItem, EntityHuman entityPlayer)
{
for (ModContainer mod : Loader.getModList())
{
if (mod.wantsPickupNotification())
{
mod.getPickupNotifier().notifyPickup(entityItem, entityPlayer);
}
}
}
/**
* Raise an exception
*
* @param exception
* @param message
* @param stopGame
*/
public void raiseException(Throwable exception, String message, boolean stopGame)
{
FMLCommonHandler.instance().getFMLLogger().throwing("FMLHandler", "raiseException", exception);
throw new RuntimeException(exception);
}
/**
* Attempt to dispense the item as an entity other than just as a the item itself
*
* @param world
* @param x
* @param y
* @param z
* @param xVelocity
* @param zVelocity
* @param item
* @return
*/
public boolean tryDispensingEntity(World world, double x, double y, double z, byte xVelocity, byte zVelocity, ItemStack item)
{
for (ModContainer mod : Loader.getModList())
{
if (mod.wantsToDispense() && mod.getDispenseHandler().dispense(x, y, z, xVelocity, zVelocity, world, item))
{
return true;
}
}
return false;
}
/**
* @return the instance
*/
public static FMLBukkitHandler instance()
{
return INSTANCE;
}
/**
* Build a list of default overworld biomes
*
* @return
*/
public BiomeBase[] getDefaultOverworldBiomes()
{
if (defaultOverworldBiomes == null)
{
ArrayList<BiomeBase> biomes = new ArrayList<BiomeBase>(20);
for (int i = 0; i < 23; i++)
{
if ("Sky".equals(BiomeBase.biomes[i].y) || "Hell".equals(BiomeBase.biomes[i].y))
{
continue;
}
biomes.add(BiomeBase.biomes[i]);
}
defaultOverworldBiomes = new BiomeBase[biomes.size()];
biomes.toArray(defaultOverworldBiomes);
}
return defaultOverworldBiomes;
}
/**
* Called when an item is crafted
*
* @param player
* @param craftedItem
* @param craftingGrid
*/
public void onItemCrafted(EntityHuman player, ItemStack craftedItem, IInventory craftingGrid)
{
for (ModContainer mod : Loader.getModList())
{
if (mod.wantsCraftingNotification())
{
mod.getCraftingHandler().onCrafting(player, craftedItem, craftingGrid);
}
}
}
/**
* Called when an item is smelted
*
* @param player
* @param smeltedItem
*/
public void onItemSmelted(EntityHuman player, ItemStack smeltedItem)
{
for (ModContainer mod : Loader.getModList())
{
if (mod.wantsCraftingNotification())
{
mod.getCraftingHandler().onSmelting(player, smeltedItem);
}
}
}
/**
* Called when a chat packet is received
*
* @param chat
* @param player
* @return true if you want the packet to stop processing and not echo to the rest of the world
*/
public boolean handleChatPacket(Packet3Chat chat, EntityHuman player)
{
for (ModContainer mod : Loader.getModList())
{
if (mod.wantsNetworkPackets() && mod.getNetworkHandler().onChat(chat, player))
{
return true;
}
}
return false;
}
/**
* Called when a packet 250 packet is received from the player
*
* @param packet
* @param player
*/
public void handlePacket250(Packet250CustomPayload packet, EntityHuman player)
{
if ("REGISTER".equals(packet.tag) || "UNREGISTER".equals(packet.tag))
{
handleClientRegistration(packet, player);
return;
}
ModContainer mod = FMLCommonHandler.instance().getModForChannel(packet.tag);
if (mod != null)
{
mod.getNetworkHandler().onPacket250Packet(packet, player);
}
}
/**
* Handle register requests for packet 250 channels
*
* @param packet
*/
private void handleClientRegistration(Packet250CustomPayload packet, EntityHuman player)
{
if (packet.data==null) {
return;
}
try
{
for (String channel : new String(packet.data, "UTF8").split("\0"))
{
// Skip it if we don't know it
if (FMLCommonHandler.instance().getModForChannel(channel) == null)
{
continue;
}
if ("REGISTER".equals(packet.tag))
{
FMLCommonHandler.instance().activateChannel(player, channel);
}
else
{
FMLCommonHandler.instance().deactivateChannel(player, channel);
}
}
}
catch (UnsupportedEncodingException e)
{
getMinecraftLogger().warning("Received invalid registration packet");
}
}
/**
* Handle a login
*
* @param loginPacket
* @param networkManager
*/
public void handleLogin(Packet1Login loginPacket, NetworkManager networkManager)
{
Packet250CustomPayload packet = new Packet250CustomPayload();
packet.tag = "REGISTER";
packet.data = FMLCommonHandler.instance().getPacketRegistry();
packet.length = packet.data.length;
if (packet.length>0) {
networkManager.queue(packet);
}
}
public void announceLogin(EntityHuman player) {
for (ModContainer mod : Loader.getModList())
{
if (mod.wantsPlayerTracking())
{
mod.getPlayerTracker().onPlayerLogin(player);
}
}
}
@Override
public File getMinecraftRootDirectory()
{
try {
return server.a(".").getCanonicalFile();
} catch (IOException ioe) {
return new File(".");
}
}
/**
* @param var2
* @return
*/
public boolean handleServerCommand(String command, String player, ICommandListener listener)
{
for (ModContainer mod : Loader.getModList()) {
if (mod.wantsConsoleCommands() && mod.getConsoleHandler().handleCommand(command, player, listener)) {
return true;
}
}
return false;
}
/**
* @param player
*/
public void announceLogout(EntityHuman player)
{
for (ModContainer mod : Loader.getModList())
{
if (mod.wantsPlayerTracking())
{
mod.getPlayerTracker().onPlayerLogout(player);
}
}
}
/**
* @param p_28168_1_
*/
public void announceDimensionChange(EntityHuman player)
{
for (ModContainer mod : Loader.getModList())
{
if (mod.wantsPlayerTracking())
{
mod.getPlayerTracker().onPlayerChangedDimension(player);
}
}
}
/**
* @param biome
*/
public void addBiomeToDefaultWorldGenerator(BiomeBase biome)
{
WorldType.NORMAL.addNewBiome(biome);
}
/**
* @param biome
*/
public void removeBiomeFromDefaultWorldGenerator(BiomeBase biome)
{
WorldType.NORMAL.removeBiome(biome);
}
@Override
public Object getMinecraftInstance() {
return server;
}
@Override
public String getCurrentLanguage()
{
return LocaleLanguage.a().getCurrentLanguage();
}
@Override
public Properties getCurrentLanguageTable()
{
return LocaleLanguage.a().getCurrentLanguageTable();
}
@Override
public String getObjectName(Object instance)
{
String objectName;
if (instance instanceof Item) {
objectName=((Item)instance).getName();
} else if (instance instanceof Block) {
objectName=((Block)instance).getName();
} else if (instance instanceof ItemStack) {
objectName=Item.byId[((ItemStack)instance).id].a((ItemStack)instance);
} else {
throw new IllegalArgumentException(String.format("Illegal object for naming %s",instance));
}
objectName+=".name";
return objectName;
}
@Override
public ModMetadata readMetadataFrom(InputStream input, ModContainer mod) throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
public void profileStart(String profileLabel) {
if (profiler!=null)
{
profiler.start(profileLabel);
}
}
@Override
public void profileEnd() {
if (profiler!=null)
{
profiler.end();
}
}
@Override
public ModProperty getModLoaderPropertyFor(Field f) {
if (f.isAnnotationPresent(MLProp.class)) {
MLProp prop = f.getAnnotation(MLProp.class);
return new ModProperty(prop.info(), prop.min(), prop.max(), prop.name());
}
return null;
}
@Override
public List<String> getAdditionalBrandingInformation() {
return null;
}
@Override
public Side getSide() {
return Side.BUKKIT;
}
@Override
public ProxyInjector findSidedProxyOn(cpw.mods.fml.common.modloader.BaseMod mod) {
for (Field f : mod.getClass().getDeclaredFields())
{
if (f.isAnnotationPresent(SidedProxy.class))
{
SidedProxy sp = f.getAnnotation(SidedProxy.class);
return new ProxyInjector(sp.clientSide(), sp.serverSide(), sp.bukkitSide(), f);
}
}
return null;
}
public void onServerPostTick() {
FMLCommonHandler.instance().tickEnd(EnumSet.of(TickType.GAME));
}
public void onServerPreTick() {
FMLCommonHandler.instance().tickStart(EnumSet.of(TickType.GAME));
}
}
@@ -1,131 +0,0 @@
package cpw.mods.fml.server;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableMultiset;
import com.google.common.collect.Lists;
import com.google.common.collect.Multiset;
import com.google.common.collect.Multiset.Entry;
import com.google.common.collect.Multisets;
import com.google.common.collect.TreeMultiset;
import com.google.common.primitives.Ints;
public class FMLBukkitProfiler {
private static FMLBukkitProfiler lastInstance;
private static long endTime;
private LinkedList<String> profiles = new LinkedList<String>();
private TreeMultiset<String> hitCounter = TreeMultiset.create();
private TreeMultiset<String> timings = TreeMultiset.create();
private long timestamp;
public static long beginProfiling(int seconds)
{
long now = System.currentTimeMillis();
if (lastInstance == null)
{
lastInstance = new FMLBukkitProfiler();
FMLBukkitHandler.instance().profiler = lastInstance;
endTime = now + seconds * 1000;
}
if (endTime > now)
{
return (endTime - now) / 1000;
}
else
{
return 0;
}
}
public static long endProfiling()
{
FMLBukkitHandler.instance().profiler = null;
return endTime - System.currentTimeMillis();
}
public static void resetProfiling()
{
endProfiling();
lastInstance = null;
}
public void start(String profileLabel)
{
profiles.push(profileLabel);
timestamp = System.nanoTime();
}
public void end()
{
int timing = (int)((System.nanoTime() - timestamp)/1000L);
String label = Joiner.on('.').join(profiles);
profiles.pop();
hitCounter.add(label);
timings.add(label,timing);
if (System.currentTimeMillis()>endTime)
{
endProfiling();
}
}
public static String[] dumpProfileData(int count)
{
if (lastInstance == null)
{
return new String[] { "No profile data available" };
}
if (endTime > System.currentTimeMillis())
{
return new String[] { String.format("Timing is being gathered for another %d seconds", endTime - System.currentTimeMillis()) };
}
return lastInstance.profileData(count);
}
private String[] profileData(int count) {
List<Entry<String>> sortedTiming = getEntriesSortedByFrequency(timings, false);
ArrayList<String> timeLine = new ArrayList<String>();
double totalTime = timings.size();
for (Entry<String> hit : sortedTiming)
{
if (--count == 0)
{
break;
}
timeLine.add(String.format("%s : %d microseconds, %d invocations. %.2f %% of overall time",hit.getElement(), hit.getCount(), hitCounter.count(hit.getElement()), 100.0 * hit.getCount()/totalTime));
}
return timeLine.toArray(new String[0]);
}
/*
* Code from http://stackoverflow.com/questions/4345633/simplest-way-to-iterate-through-a-multiset-in-the-order-of-element-frequency
*/
private enum EntryComp implements Comparator<Multiset.Entry<?>>{
DESCENDING{
@Override
public int compare(final Entry<?> a, final Entry<?> b){
return Ints.compare(b.getCount(), a.getCount());
}
},
ASCENDING{
@Override
public int compare(final Entry<?> a, final Entry<?> b){
return Ints.compare(a.getCount(), b.getCount());
}
},
}
private static <E> List<Entry<E>> getEntriesSortedByFrequency(final Multiset<E> ms, final boolean ascending) {
final List<Entry<E>> entryList = Lists.newArrayList(ms.entrySet());
Collections.sort(entryList, ascending ? EntryComp.ASCENDING : EntryComp.DESCENDING);
return entryList;
}
}
-409
View File
@@ -1,409 +0,0 @@
/*
* The FML Forge Mod Loader suite. Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.minecraft.server;
import java.util.Map;
import java.util.Random;
import org.bukkit.craftbukkit.generator.NetherChunkGenerator;
import org.bukkit.craftbukkit.generator.NormalChunkGenerator;
import cpw.mods.fml.common.TickType;
public abstract class BaseMod implements cpw.mods.fml.common.modloader.BaseMod
{
// CALLBACK MECHANISMS
/**
* @param minecraftInstance
* @return
*/
public final boolean doTickInGame(TickType tick, boolean tickEnd, Object minecraftInstance, Object... data)
{
if (tick==TickType.GAME && tickEnd) {
return onTickInGame((MinecraftServer)minecraftInstance);
} else {
return true;
}
}
@Override
public final void onCrafting(Object... craftingParameters)
{
takenFromCrafting((EntityHuman)craftingParameters[0], (ItemStack)craftingParameters[1], (IInventory)craftingParameters[2]);
}
@Override
public final void onSmelting(Object... smeltingParameters)
{
takenFromFurnace((EntityHuman)smeltingParameters[0], (ItemStack)smeltingParameters[1]);
}
@Override
public final boolean dispense(double x, double y, double z, byte xVelocity, byte zVelocity, Object... data)
{
return dispenseEntity((World)data[0], x, y, z, xVelocity, zVelocity, (ItemStack)data[1]);
}
@Override
public final boolean onChat(Object... data)
{
return onChatMessageReceived((EntityHuman)data[1], (Packet3Chat)data[0]);
}
@Override
public final void onServerLogin(Object handler) {
// NOOP
}
public final void onServerLogout() {
// NOOP
}
@Override
public final void onPlayerLogin(Object player)
{
onClientLogin((EntityHuman) player);
}
@Override
public final void onPlayerLogout(Object player)
{
onClientLogout((EntityHuman)player);
}
@Override
public final void onPlayerChangedDimension(Object player)
{
onClientDimensionChanged((EntityHuman)player);
}
@Override
public final void onPacket250Packet(Object... data)
{
onPacket250Received((EntityHuman)data[1], (Packet250CustomPayload)data[0]);
}
@Override
public final void notifyPickup(Object... pickupData)
{
EntityItem item = (EntityItem) pickupData[0];
EntityHuman player = (EntityHuman) pickupData[1];
onItemPickup(player, item.itemStack);
}
@Override
public final void generate(Random random, int chunkX, int chunkZ, Object... additionalData)
{
World w = (World) additionalData[0];
IChunkProvider cp = (IChunkProvider) additionalData[1];
if (cp instanceof ChunkProviderHell || cp instanceof NetherChunkGenerator)
{
generateNether(w, random, chunkX << 4, chunkZ << 4);
}
else if (cp instanceof ChunkProviderGenerate || cp instanceof NormalChunkGenerator)
{
generateSurface(w, random, chunkX << 4, chunkZ << 4);
}
}
/**
* NO-OP on client side
*/
@Override
public final boolean handleCommand(String command, Object... data)
{
return onServerCommand(command, (String)data[0], (ICommandListener)data[1]);
}
@Override
public void onRegisterAnimations() {
// NOOP on servers
}
@Override
public void onRenderHarvest(@SuppressWarnings("rawtypes") Map renderers) {
// NOOP on servers
}
// BASEMOD API
/**
* Override if you wish to provide a fuel item for the furnace and return the fuel value of the item
*
* @param id
* @param metadata
* @return
*/
public int addFuel(int id, int metadata)
{
return 0;
}
public void addRenderer(Map<Class<? extends Entity>, Object> renderers)
{
}
/**
* Override if you wish to perform some action other than just dispensing the item from the dispenser
*
* @param world
* @param x
* @param y
* @param z
* @param xVel
* @param zVel
* @param item
* @return
*/
public boolean dispenseEntity(World world, double x, double y, double z, int xVel, int zVel, ItemStack item)
{
return false;
}
/**
* Override if you wish to generate Nether (Hell biome) blocks
*
* @param world
* @param random
* @param chunkX
* @param chunkZ
*/
public void generateNether(World world, Random random, int chunkX, int chunkZ)
{
}
/**
* Override if you wish to generate Overworld (not hell or the end) blocks
*
* @param world
* @param random
* @param chunkX
* @param chunkZ
*/
public void generateSurface(World world, Random random, int chunkX, int chunkZ)
{
}
/**
* Return the name of your mod. Defaults to the class name
*
* @return
*/
public String getName()
{
return getClass().getSimpleName();
}
/**
* Get your mod priorities
*
* @return
*/
public String getPriorities()
{
return "";
}
/**
* Return the version of your mod
*
* @return
*/
public abstract String getVersion();
public void keyboardEvent(Object event)
{
}
/**
* Load your mod
*/
public abstract void load();
/**
* Finish loading your mod
*/
public void modsLoaded()
{
}
/**
* Handle item pickup
*
* @param player
* @param item
*/
public void onItemPickup(EntityHuman player, ItemStack item)
{
}
/**
* Ticked every game tick if you have subscribed to tick events through {@link ModLoader#setInGameHook(BaseMod, boolean, boolean)}
*
* @param minecraftServer the server
* @return true to continue receiving ticks
*/
public boolean onTickInGame(MinecraftServer minecraftServer)
{
return false;
}
public boolean onTickInGUI(float tick, Object game, Object gui)
{
return false;
}
/**
* Only implemented on the client side
* {@link #onChatMessageReceived(EntityPlayer, Packet3Chat)}
*
* @param text
*/
public void receiveChatPacket(String text)
{
}
/**
* Only called on the client side
* {@link #onPacket250Received(EntityPlayer, Packet250CustomPayload)}
*
* @param packet
*/
public void receiveCustomPacket(Packet250CustomPayload packet)
{
}
public void registerAnimation(Object game)
{
}
public void renderInvBlock(Object renderer, Block block, int metadata, int modelID)
{
}
public boolean renderWorldBlock(Object renderer, IBlockAccess world, int x, int y, int z, Block block, int modelID)
{
return false;
}
/**
* Called when someone crafts an item from a crafting table
*
* @param player
* @param item
* @param matrix
*/
public void takenFromCrafting(EntityHuman player, ItemStack item, IInventory matrix)
{
}
/**
* Called when someone takes a smelted item from a furnace
*
* @param player
* @param item
*/
public void takenFromFurnace(EntityHuman player, ItemStack item)
{
}
/**
* The identifier string for the mod- used in client<->server negotiation
*/
@Override
public String toString()
{
return getName() + " " + getVersion();
}
/**
* Called when a 250 packet is received on a channel registered to this mod
*
* @param source
* @param payload
*/
public void onPacket250Received(EntityHuman source, Packet250CustomPayload payload)
{
}
/**
* Called when a chat message is received. Return true to stop further processing
*
* @param source
* @param chat
* @return true if you want to consume the message so it is not available for further processing
*/
public boolean onChatMessageReceived(EntityHuman source, Packet3Chat chat)
{
return false;
}
/**
* Called when a server command is received
* @param command
* @return true if you want to consume the message so it is not available for further processing
*/
public boolean onServerCommand(String command, String sender, ICommandListener listener)
{
return false;
}
/**
* Called when a new client logs in.
*
* @param player
*/
public void onClientLogin(EntityHuman player)
{
}
/**
* Called when a client logs out of the server.
*
* @param player
*/
public void onClientLogout(EntityHuman player)
{
}
/**
*
* Called when a client changes dimensions on the server.
*
* @param player
*/
public void onClientDimensionChanged(EntityHuman player)
{
}
// Spare client junk
// -------
// void addRenderer(Map<Class<? extends Entity>, Render> renderers);
// void registerAnimation(Minecraft game);
// void renderInvBlock(RenderBlocks renderer, Block block, int metadata, int modelID);
// boolean renderWorldBlock(RenderBlocks renderer, IBlockAccess world, int x, int y, int z, Block block, int modelID);
// boolean onTickInGUI(float tick, Minecraft game, GuiScreen gui);
// void keyboardEvent(KeyBinding event);
@Override
public void keyBindingEvent(Object keybinding) {
// NOOP on server
}
}
@@ -1,164 +0,0 @@
package net.minecraft.server;
import java.util.Iterator;
import java.util.List;
import net.minecraft.src.BiomeGenBase;
import cpw.mods.fml.common.registry.IMinecraftRegistry;
import cpw.mods.fml.server.FMLBukkitHandler;
public class BukkitRegistry implements IMinecraftRegistry
{
@Override
public void addRecipe(net.minecraft.src.ItemStack output, Object... params)
{
CraftingManager.getInstance().registerShapedRecipe((ItemStack) output, params);
}
@Override
public void addShapelessRecipe(net.minecraft.src.ItemStack output, Object... params)
{
CraftingManager.getInstance().registerShapelessRecipe((ItemStack) output, params);
}
@SuppressWarnings("unchecked")
@Override
public void addRecipe(net.minecraft.src.IRecipe recipe)
{
CraftingManager.getInstance().getRecipies().add(recipe);
}
@Override
public void addSmelting(int input, net.minecraft.src.ItemStack output)
{
FurnaceRecipes.getInstance().registerRecipe(input, (ItemStack) output);
}
@Override
public void registerBlock(net.minecraft.src.Block block)
{
registerBlock(block, ItemBlock.class);
}
@Override
public void registerBlock(net.minecraft.src.Block block, Class <? extends net.minecraft.src.ItemBlock > itemclass)
{
try
{
assert block != null : "registerBlock: block cannot be null";
assert itemclass != null : "registerBlock: itemclass cannot be null";
int blockItemId = ((Block)block).id - 256;
itemclass.getConstructor(int.class).newInstance(blockItemId);
}
catch (Exception e)
{
//HMMM
}
}
@SuppressWarnings("unchecked")
@Override
public void registerEntityID(Class <? extends net.minecraft.src.Entity > entityClass, String entityName, int id)
{
EntityTypes.addNewEntityListMapping((Class<? extends Entity>) entityClass, entityName, id);
}
@SuppressWarnings("unchecked")
@Override
public void registerEntityID(Class <? extends net.minecraft.src.Entity > entityClass, String entityName, int id, int backgroundEggColour, int foregroundEggColour)
{
EntityTypes.addNewEntityListMapping((Class<? extends Entity>) entityClass, entityName, id, backgroundEggColour, foregroundEggColour);
}
@SuppressWarnings("unchecked")
@Override
public void registerTileEntity(Class <? extends net.minecraft.src.TileEntity > tileEntityClass, String id)
{
TileEntity.addNewTileEntityMapping((Class<? extends TileEntity>) tileEntityClass, id);
}
@Override
public void addBiome(BiomeGenBase biome)
{
FMLBukkitHandler.instance().addBiomeToDefaultWorldGenerator((BiomeBase) biome);
}
@Override
public void addSpawn(Class <? extends net.minecraft.src.EntityLiving > entityClass, int weightedProb, int min, int max, net.minecraft.src.EnumCreatureType typeOfCreature, BiomeGenBase... biomes)
{
BiomeBase[] realBiomes=(BiomeBase[]) biomes;
for (BiomeBase biome : realBiomes)
{
@SuppressWarnings("unchecked")
List<BiomeMeta> spawns = ((BiomeBase)biome).getMobs((EnumCreatureType)typeOfCreature);
for (BiomeMeta entry : spawns)
{
//Adjusting an existing spawn entry
if (entry.a == entityClass)
{
entry.d = weightedProb;
entry.b = min;
entry.c = max;
break;
}
}
spawns.add(new BiomeMeta(entityClass, weightedProb, min, max));
}
}
@Override
@SuppressWarnings("unchecked")
public void addSpawn(String entityName, int weightedProb, int min, int max, net.minecraft.src.EnumCreatureType spawnList, BiomeGenBase... biomes)
{
Class <? extends Entity > entityClazz = EntityTypes.getEntityToClassMapping().get(entityName);
if (EntityLiving.class.isAssignableFrom(entityClazz))
{
addSpawn((Class <? extends net.minecraft.src.EntityLiving >) entityClazz, weightedProb, min, max, spawnList, biomes);
}
}
@Override
public void removeBiome(BiomeGenBase biome)
{
FMLBukkitHandler.instance().removeBiomeFromDefaultWorldGenerator((BiomeBase)biome);
}
@Override
public void removeSpawn(Class <? extends net.minecraft.src.EntityLiving > entityClass, net.minecraft.src.EnumCreatureType typeOfCreature, BiomeGenBase... biomesO)
{
BiomeBase[] biomes=(BiomeBase[]) biomesO;
for (BiomeBase biome : biomes)
{
@SuppressWarnings("unchecked")
List<BiomeMeta> spawns = ((BiomeBase)biome).getMobs((EnumCreatureType) typeOfCreature);
Iterator<BiomeMeta> entries = spawns.iterator();
while (entries.hasNext())
{
BiomeMeta entry = entries.next();
if (entry.a == entityClass)
{
entries.remove();
}
}
}
}
@Override
@SuppressWarnings("unchecked")
public void removeSpawn(String entityName, net.minecraft.src.EnumCreatureType spawnList, BiomeGenBase... biomes)
{
Class <? extends Entity > entityClazz = EntityTypes.getEntityToClassMapping().get(entityName);
if (EntityLiving.class.isAssignableFrom(entityClazz))
{
removeSpawn((Class <? extends net.minecraft.src.EntityLiving >) entityClazz, spawnList, biomes);
}
}
}
-48
View File
@@ -1,48 +0,0 @@
/*
* The FML Forge Mod Loader suite. Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.minecraft.server;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.RetentionPolicy.*;
import static java.lang.annotation.ElementType.*;
/**
* @author cpw
*
*/
@Retention(value = RUNTIME)
@Target(value = FIELD)
public @interface MLProp
{
/**
* Adds additional help to top of configuration file.
*/
String info() default "";
/**
* Maximum value allowed if field is a number.
*/
double max() default Double.MAX_VALUE;
/**
* Minimum value allowed if field is a number.
*/
double min() default Double.MIN_VALUE;
/**
* Overrides the field name for property key.
*/
String name() default "";
}
-780
View File
@@ -1,780 +0,0 @@
/*
* The FML Forge Mod Loader suite. Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.minecraft.server;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ReflectionHelper;
import cpw.mods.fml.common.modloader.ModLoaderHelper;
import cpw.mods.fml.common.modloader.ModLoaderModContainer;
import cpw.mods.fml.common.registry.FMLRegistry;
import cpw.mods.fml.server.FMLBukkitHandler;
public class ModLoader
{
/**
* Not used on the server.
*
* @param achievement
* @param name
* @param description
*/
public static void addAchievementDesc(Achievement achievement, String name, String description)
{
String achName=achievement.getName();
addLocalization(achName, name);
addLocalization(achName+".desc", description);
}
/**
* This method is a call in hook from modified external code. Implemented elsewhere.
*
* {@link FMLCommonHandler#fuelLookup(int, int)}
*
* @param id
* @param metadata
* @return
*/
@Deprecated
public static int addAllFuel(int id, int metadata)
{
return 0;
}
public static void addAllRenderers(Map<Class<? extends Entity>, Object> renderers)
{
}
public static void addAnimation(Object anim)
{
}
/**
* This method is unimplemented in server versions to date.
*
* @param armor
* @return
*/
public static int addArmor(String armor)
{
return 0;
}
/**
* This method adds the supplied biome to the set of candidate biomes for the default world generator type.
*
* @param biome
*/
public static void addBiome(BiomeBase biome)
{
FMLRegistry.addBiome(biome);
}
/**
* Add localization for the specified string
*
* @param key
* @param value
*/
public static void addLocalization(String key, String value)
{
addLocalization(key, "en_US", value);
}
/**
* Add localization for the specified string
*
* @param key
* @param lang
* @param value
*/
public static void addLocalization(String key, String lang, String value)
{
FMLCommonHandler.instance().addStringLocalization(key, lang, value);
}
/**
* Name the specified minecraft object with the supplied name
*
* @param instance
* @param name
*/
public static void addName(Object instance, String name)
{
addName(instance,"en_US",name);
}
/**
* Unimplemented on the server as it does not generate names
*
* @param instance
* @param lang
* @param name
*/
public static void addName(Object instance, String lang, String name)
{
FMLCommonHandler.instance().addNameForObject(instance, lang, name);
}
/**
* Unimplemented on the server as it does not render textures
*
* @param fileToOverride
* @param fileToAdd
* @return
*/
public static int addOverride(String fileToOverride, String fileToAdd)
{
return 0;
}
/**
* Unimplemented on the server as it does not render textures
*
* @param path
* @param overlayPath
* @param index
*/
public static void addOverride(String path, String overlayPath, int index)
{
// NOOP
}
/**
* Add a Shaped Recipe
*
* @param output
* @param params
*/
public static void addRecipe(ItemStack output, Object... params)
{
FMLRegistry.addRecipe(output, params);
}
/**
* Add a shapeless recipe
*
* @param output
* @param params
*/
public static void addShapelessRecipe(ItemStack output, Object... params)
{
FMLRegistry.addShapelessRecipe(output, params);
}
/**
* Add a new product to be smelted
*
* @param input
* @param output
*/
public static void addSmelting(int input, ItemStack output)
{
FMLRegistry.addSmelting(input, output);
}
/**
* Add a mob to the spawn list
*
* @param entityClass
* @param weightedProb
* @param min
* @param max
* @param spawnList
*/
public static void addSpawn(Class <? extends EntityLiving > entityClass, int weightedProb, int min, int max, EnumCreatureType spawnList)
{
FMLRegistry.addSpawn(entityClass, weightedProb, min, max, spawnList, FMLBukkitHandler.instance().getDefaultOverworldBiomes());
}
/**
* Add a mob to the spawn list
* @param entityClass
* @param weightedProb
* @param min
* @param max
* @param spawnList
* @param biomes
*/
public static void addSpawn(Class <? extends EntityLiving > entityClass, int weightedProb, int min, int max, EnumCreatureType spawnList, BiomeBase... biomes)
{
FMLRegistry.addSpawn(entityClass, weightedProb, min, max, spawnList, biomes);
}
/**
* Add a mob to the spawn list
*
* @param entityName
* @param weightedProb
* @param min
* @param max
* @param spawnList
*/
public static void addSpawn(String entityName, int weightedProb, int min, int max, EnumCreatureType spawnList)
{
FMLRegistry.addSpawn(entityName, weightedProb, min, max, spawnList, FMLBukkitHandler.instance().getDefaultOverworldBiomes());
}
/**
* Add a mob to the spawn list
* @param entityName
* @param weightedProb
* @param min
* @param max
* @param spawnList
* @param biomes
*/
public static void addSpawn(String entityName, int weightedProb, int min, int max, EnumCreatureType spawnList, BiomeBase... biomes)
{
FMLRegistry.addSpawn(entityName, weightedProb, min, max, spawnList, biomes);
}
/**
* This method is a call in hook from modified external code. Implemented elsewhere.
* {@link FMLBukkitHandler#tryDispensingEntity(World, double, double, double, byte, byte, ItemStack)}
*
* @param world
* @param x
* @param y
* @param z
* @param xVel
* @param zVel
* @param item
* @return
*/
@Deprecated
public static boolean dispenseEntity(World world, double x, double y, double z, int xVel, int zVel, ItemStack item)
{
return false;
}
/**
* Remove a container and drop all the items in it on the ground around
*
* @param world
* @param x
* @param y
* @param z
*/
public static void genericContainerRemoval(World world, int x, int y, int z)
{
TileEntity te = world.getTileEntity(x, y, z);
if (!(te instanceof IInventory))
{
return;
}
IInventory inv = (IInventory)te;
for (int l = 0; l < inv.getSize(); l++)
{
ItemStack itemstack = inv.getItem(l);
if (itemstack == null)
{
continue;
}
float f = world.random.nextFloat() * 0.8F + 0.1F;
float f1 = world.random.nextFloat() * 0.8F + 0.1F;
float f2 = world.random.nextFloat() * 0.8F + 0.1F;
while (itemstack.count > 0)
{
int i1 = world.random.nextInt(21) + 10;
if (i1 > itemstack.count)
{
i1 = itemstack.count ;
}
itemstack.count -= i1;
EntityItem entityitem = new EntityItem(world, (float)te.x + f, (float)te.y + f1, (float)te.z + f2, new ItemStack(itemstack.id, i1, itemstack.getData()));
float f3 = 0.05F;
entityitem.motX = (float)world.random.nextGaussian() * f3;
entityitem.motY = (float)world.random.nextGaussian() * f3 + 0.2F;
entityitem.motZ = (float)world.random.nextGaussian() * f3;
if (itemstack.hasTag())
{
entityitem.itemStack.setTag((NBTTagCompound)itemstack.getTag().clone());
}
world.addEntity(entityitem);
}
}
}
/**
* Get a list of all BaseMod loaded into the system
* {@link ModLoaderModContainer#findAll}
*
* @return
*/
public static List<BaseMod> getLoadedMods()
{
return ModLoaderModContainer.findAll(BaseMod.class);
}
/**
* Get a logger instance {@link FMLCommonHandler#getFMLLogger()}
*
* @return
*/
public static Logger getLogger()
{
return FMLCommonHandler.instance().getFMLLogger();
}
public static Object getMinecraftInstance()
{
return getMinecraftServerInstance();
}
/**
* Get the minecraft server instance
* {@link FMLServerHandler#getServer()}
* @return
*/
public static MinecraftServer getMinecraftServerInstance()
{
return FMLBukkitHandler.instance().getServer();
}
/**
* Get a value from a field using reflection
* {@link ReflectionHelper#getPrivateValue(Class, Object, int)}
*
* @param instanceclass
* @param instance
* @param fieldindex
* @return
*/
public static <T, E> T getPrivateValue(Class <? super E > instanceclass, E instance, int fieldindex)
{
return ReflectionHelper.getPrivateValue(instanceclass, instance, fieldindex);
}
/**
* Get a value from a field using reflection
* {@link ReflectionHelper#getPrivateValue(Class, Object, String)}
*
* @param instanceclass
* @param instance
* @param field
* @return
*/
public static <T, E> T getPrivateValue(Class <? super E > instanceclass, E instance, String field)
{
return ReflectionHelper.getPrivateValue(instanceclass, instance, field);
}
/**
* Stubbed method on the server to return a unique model id
*
*/
public static int getUniqueBlockModelID(BaseMod mod, boolean inventoryRenderer)
{
return -1;
}
/**
* Get a new unique entity id
* {@link Entity#getNextId()}
*
* @return
*/
public static int getUniqueEntityId()
{
return FMLCommonHandler.instance().nextUniqueEntityListId();
}
public static int getUniqueSpriteIndex(String path)
{
return -1;
}
/**
* To properly implement packet 250 protocol you should always check your
* channel is active prior to sending the packet
*
* @param player
* @param channel
* @return
*/
public static boolean isChannelActive(EntityPlayer player, String channel)
{
return FMLCommonHandler.instance().isChannelActive(channel, player);
}
public static boolean isGUIOpen(Class<?> gui)
{
return false;
}
/**
* Is the named mod loaded?
* {@link Loader#isModLoaded(String)}
*
* @param modname
* @return
*/
public static boolean isModLoaded(String modname)
{
return Loader.isModLoaded(modname);
}
/**
* Implemented elsewhere
*/
@Deprecated
public static void loadConfig()
{
}
public static Object loadImage(Object renderEngine, String path) throws Exception
{
return null;
}
/**
* Call in from elsewhere. Unimplemented here.
* @param player
* @param item
*/
@Deprecated
public static void onItemPickup(EntityPlayer player, ItemStack item)
{
}
/**
* Call in from elsewhere. Unimplemented here.
*/
@Deprecated
public static void onTick(float tick, Object game)
{
}
public static void openGUI(EntityPlayer player, Object gui)
{
// NOOP
}
@Deprecated
public static void populateChunk(IChunkProvider generator, int chunkX, int chunkZ, World world)
{
}
/**
* This method is a call in hook from modified external code. Implemented elsewhere.
* {@link FMLBukkitHandler#handlePacket250(Packet250CustomPayload, EntityHuman)}
*
* @param packet
*/
@Deprecated
public static void receivePacket(Packet250CustomPayload packet)
{
}
@Deprecated
public static Object[] registerAllKeys(Object[] keys)
{
return keys;
}
@Deprecated
public static void registerAllTextureOverrides(Object cache)
{
}
/**
* Register a new block
*
* @param block
*/
public static void registerBlock(Block block)
{
FMLRegistry.registerBlock(block);
}
/**
* Register a new block
*
* @param block
* @param itemclass
*/
public static void registerBlock(Block block, Class <? extends ItemBlock > itemclass)
{
FMLRegistry.registerBlock(block, itemclass);
}
/**
* Register a new entity ID
*
* @param entityClass
* @param entityName
* @param id
*/
public static void registerEntityID(Class <? extends Entity > entityClass, String entityName, int id)
{
FMLRegistry.registerEntityID(entityClass, entityName, id);
}
/**
* Register a new entity ID
*
* @param entityClass
* @param entityName
* @param id
* @param background
* @param foreground
*/
public static void registerEntityID(Class <? extends Entity > entityClass, String entityName, int id, int background, int foreground)
{
FMLRegistry.registerEntityID(entityClass, entityName, id, background, foreground);
}
public static void registerKey(BaseMod mod, Object keyHandler, boolean allowRepeat)
{
// NOOP
}
/**
* Register the mod for packets on this channel. This only registers the
* channel with Forge Mod Loader, not with clients connecting- use
* BaseMod.onClientLogin to tell them about your custom channel
* {@link FMLCommonHandler#registerChannel(cpw.mods.fml.common.ModContainer, String)}
*
* @param mod
* @param channel
*/
public static void registerPacketChannel(BaseMod mod, String channel)
{
FMLCommonHandler.instance().registerChannel(ModLoaderModContainer.findContainerFor(mod), channel);
}
/**
* Register a new tile entity class
*
* @param tileEntityClass
* @param id
*/
public static void registerTileEntity(Class <? extends TileEntity > tileEntityClass, String id)
{
FMLRegistry.registerTileEntity(tileEntityClass, id);
}
public static void registerTileEntity(Class<? extends TileEntity> tileEntityClass, String id, Object renderer)
{
FMLRegistry.instance().registerTileEntity(tileEntityClass, id);
}
/**
* Remove a biome from the list of generated biomes
*
* @param biome
*/
public static void removeBiome(BiomeBase biome)
{
FMLRegistry.removeBiome(biome);
}
/**
* Remove a spawn
*
* @param entityClass
* @param spawnList
*/
public static void removeSpawn(Class <? extends EntityLiving > entityClass, EnumCreatureType spawnList)
{
FMLRegistry.removeSpawn(entityClass, spawnList, FMLBukkitHandler.instance().getDefaultOverworldBiomes());
}
/**
* Remove a spawn
*
* @param entityClass
* @param spawnList
* @param biomes
*/
public static void removeSpawn(Class <? extends EntityLiving > entityClass, EnumCreatureType spawnList, BiomeBase... biomes)
{
FMLRegistry.removeSpawn(entityClass, spawnList, biomes);
}
/**
* Remove a spawn
*
* @param entityName
* @param spawnList
*/
public static void removeSpawn(String entityName, EnumCreatureType spawnList)
{
FMLRegistry.removeSpawn(entityName, spawnList, FMLBukkitHandler.instance().getDefaultOverworldBiomes());
}
/**
* Remove a spawn
*
* @param entityName
* @param spawnList
* @param biomes
*/
public static void removeSpawn(String entityName, EnumCreatureType spawnList, BiomeBase... biomes)
{
FMLRegistry.removeSpawn(entityName, spawnList, biomes);
}
@Deprecated
public static boolean renderBlockIsItemFull3D(int modelID)
{
return false;
}
@Deprecated
public static void renderInvBlock(Object renderer, Block block, int metadata, int modelID)
{
// NOOP
}
@Deprecated
public static boolean renderWorldBlock(Object renderer, IBlockAccess world, int x, int y, int z, Block block, int modelID)
{
return false;
}
/**
* Configuration is handled elsewhere
* {@link ModLoaderModContainer}
*/
@Deprecated
public static void saveConfig()
{
}
/**
* Send a chat message to the server
* {@link FMLServerHandler#handleChatPacket(Packet3Chat, EntityPlayer)}
*
* @param text
*/
@Deprecated
public static void serverChat(String text)
{
//TODO
}
@Deprecated
public static void serverLogin(Object handler, Packet1Login loginPacket)
{
//TODO
}
/**
* Indicate that you want to receive ticks
*
* @param mod receiving the events
* @param enable indicates whether you want to recieve them or not
* @param useClock Not used in server side: all ticks are sent on the server side (no render subticks)
*/
public static void setInGameHook(BaseMod mod, boolean enable, boolean useClock)
{
ModLoaderHelper.updateStandardTicks(mod, enable, useClock);
}
public static void setInGUIHook(BaseMod mod, boolean enable, boolean useClock)
{
ModLoaderHelper.updateGUITicks(mod, enable, useClock);
}
/**
* Set a private field to a value using reflection
* {@link ReflectionHelper#setPrivateValue(Class, Object, int, Object)}
*
* @param instanceclass
* @param instance
* @param fieldindex
* @param value
*/
public static <T, E> void setPrivateValue(Class <? super T > instanceclass, T instance, int fieldindex, E value)
{
ReflectionHelper.setPrivateValue(instanceclass, instance, fieldindex, value);
}
/**
* Set a private field to a value using reflection
* {@link ReflectionHelper#setPrivateValue(Class, Object, String, Object)}
*
* @param instanceclass
* @param instance
* @param field
* @param value
*/
public static <T, E> void setPrivateValue(Class <? super T > instanceclass, T instance, String field, E value)
{
ReflectionHelper.setPrivateValue(instanceclass, instance, field, value);
}
/**
* This method is a call in hook from modified external code. Implemented elsewhere.
* {@link FMLBukkitHandler#onItemCrafted(EntityHuman, ItemStack, IInventory)}
*
* @param player
* @param item
* @param matrix
*/
@Deprecated
public static void takenFromCrafting(EntityHuman player, ItemStack item, IInventory matrix)
{
}
/**
* This method is a call in hook from modified external code. Implemented elsewhere.
* {@link FMLBukkitHandler#onItemSmelted(EntityHuman, ItemStack)}
*
* @param player
* @param item
*/
@Deprecated
public static void takenFromFurnace(EntityHuman player, ItemStack item)
{
}
/**
* Throw the offered exception. Likely will stop the game.
* {@link FMLBukkitHandler#raiseException(Throwable, String, boolean)}
* @param message
* @param e
*/
public static void throwException(String message, Throwable e)
{
FMLBukkitHandler.instance().raiseException(e, message, true);
}
/**
* To properly implement packet 250 protocol you should always check your channel
* is active prior to sending the packet
*
* @param player
* @param channel
* @return
*/
public static boolean isChannelActive(EntityHuman player, String channel)
{
return FMLCommonHandler.instance().isChannelActive(channel, player);
}
}
@@ -1,46 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.minecraft.server;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface SidedProxy
{
/**
* The name of the client side class to load and populate
* @return
*/
String clientSide() default "";
/**
* The name of the server side class to load and populate
* @return
*/
String serverSide() default "";
/**
* The name of the a special bukkit plugin class to load and populate
*/
String bukkitSide() default "";
}
@@ -1,5 +0,0 @@
package net.minecraft.src;
public interface BiomeGenBase {
}
-5
View File
@@ -1,5 +0,0 @@
package net.minecraft.src;
public interface Block {
}
-5
View File
@@ -1,5 +0,0 @@
package net.minecraft.src;
public interface Entity {
}
@@ -1,5 +0,0 @@
package net.minecraft.src;
public interface EntityLiving {
}
@@ -1,5 +0,0 @@
package net.minecraft.src;
public interface EnumCreatureType {
}
-5
View File
@@ -1,5 +0,0 @@
package net.minecraft.src;
public interface IRecipe {
}
-5
View File
@@ -1,5 +0,0 @@
package net.minecraft.src;
public interface ItemBlock {
}
-5
View File
@@ -1,5 +0,0 @@
package net.minecraft.src;
public interface ItemStack {
}
-5
View File
@@ -1,5 +0,0 @@
package net.minecraft.src;
public interface TileEntity {
}
-43
View File
@@ -1,43 +0,0 @@
import sys
import os, os.path, shutil
import fnmatch
import re
def main():
sys.stdout.flush()
for x in range(1, len(sys.argv)):
cleanup_source(sys.argv[x])
count = 0
def cleanup_source(path):
path = os.path.normpath(path)
regex_cases_before = re.compile(r'((case|default).+\r?\n)\r?\n', re.MULTILINE) #Fixes newline after case before case body
regex_cases_after = re.compile(r'\r?\n(\r?\n[ \t]+(case|default))', re.MULTILINE) #Fixes newline after case body before new case
def updatefile(src_file):
global count
tmp_file = src_file + '.tmp'
count = 0
with open(src_file, 'r') as fh:
buf = fh.read()
def fix_cases(match):
global count
count += 1
return match.group(1)
buf = regex_cases_before.sub(fix_cases, buf)
buf = regex_cases_after.sub(fix_cases, buf)
if count > 0:
with open(tmp_file, 'w') as fh:
fh.write(buf)
shutil.move(tmp_file, src_file)
for path, _, filelist in os.walk(path, followlinks=True):
sub_dir = os.path.relpath(path, path)
for cur_file in fnmatch.filter(filelist, '*.java'):
src_file = os.path.normpath(os.path.join(path, cur_file))
updatefile(src_file)
if __name__ == '__main__':
main()
@@ -1,31 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
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();
}
@@ -1,138 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.client;
import java.util.BitSet;
import java.util.HashMap;
import java.util.logging.Level;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.FMLLog;
/**
* @author cpw
*
*/
public class SpriteHelper
{
private static HashMap<String, BitSet> spriteInfo = new HashMap<String, BitSet>();
private static void initMCSpriteMaps() {
BitSet slots =
SpriteHelper.toBitSet(
"0000000000000000" +
"0000000000110000" +
"0000000000100000" +
"0000000001100000" +
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0000000000011111" +
"0000000000000000" +
"0000000001111100" +
"0000000001111000" +
"0000000000000000");
spriteInfo.put("/terrain.png", slots);
slots = SpriteHelper.toBitSet(
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0000000000000000" +
"0111110000000000" +
"1111111010000000" +
"0111111110000000" +
"0111111111111001" +
"1111111111111111" +
"0000011111111111" +
"0000000000000000");
spriteInfo.put("/gui/items.png", slots);
}
/**
* Register a sprite map for ModTextureStatic, to allow for other mods to override
* your sprite page.
*
*
*/
public static void registerSpriteMapForFile(String file, String spriteMap) {
if (spriteInfo.size() == 0) {
initMCSpriteMaps();
}
if (spriteInfo.containsKey(file)) {
FMLCommonHandler.instance().getFMLLogger().finer(String.format("Duplicate attempt to register a sprite file %s for overriding -- ignoring",file));
return;
}
spriteInfo.put(file, toBitSet(spriteMap));
}
public static int getUniqueSpriteIndex(String path)
{
if (!spriteInfo.containsKey("/terrain.png"))
{
initMCSpriteMaps();
}
BitSet slots = spriteInfo.get(path);
if (slots == null)
{
Exception ex = new Exception(String.format("Invalid getUniqueSpriteIndex call for texture: %s", path));
FMLLog.log(Level.SEVERE, ex, "A critical error has been detected with sprite overrides");
FMLCommonHandler.instance().raiseException(ex,"Invalid request to getUniqueSpriteIndex",true);
}
int ret = getFreeSlot(slots);
if (ret == -1)
{
Exception ex = new Exception(String.format("No more sprite indicies left for: %s", path));
FMLLog.log(Level.SEVERE, ex, "There are no sprite indicies left for %s", path);
FMLCommonHandler.instance().raiseException(ex,"No more sprite indicies left", true);
}
return ret;
}
public static BitSet toBitSet(String data)
{
BitSet ret = new BitSet(data.length());
for (int x = 0; x < data.length(); x++)
{
ret.set(x, data.charAt(x) == '1');
}
return ret;
}
public static int getFreeSlot(BitSet slots)
{
int next=slots.nextSetBit(0);
slots.clear(next);
return next;
}
public static int freeSlotCount(String textureToOverride)
{
return spriteInfo.get(textureToOverride).cardinality();
}
}
@@ -1,41 +0,0 @@
package cpw.mods.fml.client;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderEngine;
public class TextureFXManager
{
private static final TextureFXManager INSTANCE = new TextureFXManager();
private Minecraft client;
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 static TextureFXManager instance()
{
return INSTANCE;
}
}
@@ -1,37 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.minecraft.src;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.EntityRenderer;
public class EntityRendererProxy extends EntityRenderer
{
public static final String fmlMarker = "This is an FML marker";
private Minecraft game;
public EntityRendererProxy(Minecraft minecraft)
{
super(minecraft);
game = minecraft;
}
@Override
public void func_78480_b(float tick)
{
super.func_78480_b(tick);
//This is where ModLoader does all of it's ticking
}
}
-168
View File
@@ -1,168 +0,0 @@
--- commands.py
+++ commands.py
@@ -58,6 +58,8 @@
def reallyrmtree(path):
+ if os.path.isfile(os.path.join(path, 'asm-all-4.0.jar')): #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)
@@ -788,6 +790,8 @@
binlk = {CLIENT: self.binclient, SERVER: self.binserver}
testlk = {CLIENT: self.testclient, SERVER: self.testserver}
+ if side == SERVER:
+ return self.checkbins(CLIENT)
if not os.path.exists(os.path.join(binlk[side], os.path.normpath(testlk[side] + '.class'))):
return False
return True
@@ -1029,6 +1033,10 @@
pathsrclk = {CLIENT: self.srcclient, SERVER: self.srcserver}
pathlog = {CLIENT: self.clientrecomplog, SERVER: self.serverrecomplog}
+ if side == SERVER: #Disable server because FML recombines it into client
+ self.logger.info('Server side recompiling skipped, this is normal')
+ return
+
if not os.path.exists(pathbinlk[side]):
os.makedirs(pathbinlk[side])
@@ -1062,7 +1070,7 @@
raise
def startserver(self):
- classpath = [self.binserver] + self.cpathserver
+ classpath = [self.binclient, self.srcclient] + self.cpathserver
classpath = [os.path.join('..', p) for p in classpath]
classpath = os.pathsep.join(classpath)
os.chdir(self.dirjars)
@@ -1070,7 +1078,7 @@
self.runmc(forkcmd)
def startclient(self):
- classpath = [self.binclient] + self.cpathclient
+ classpath = [self.binclient, self.srcclient] + self.cpathclient
classpath = [os.path.join('..', p) for p in classpath]
classpath = os.pathsep.join(classpath)
natives = os.path.join('..', self.dirnatives)
@@ -1197,20 +1205,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 = {
@@ -1344,13 +1352,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 = {
@@ -1427,7 +1435,7 @@
self.runcmd(forkcmd)
return True
- def gathermd5s(self, side, reobf=False):
+ def gathermd5s(self, side, reobf=False, skip_fml=False):
if not reobf:
md5lk = {CLIENT: self.md5client, SERVER: self.md5server}
else:
@@ -1442,6 +1450,9 @@
class_path = ''
else:
class_path += '/'
+ if skip_fml:
+ if class_path.startswith('cpw/'):
+ continue
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))
@@ -1535,6 +1546,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:
@@ -1548,6 +1561,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)
@@ -1594,6 +1624,9 @@
sys.exit(1)
for entry in newfiles:
+ if 'commands.py' in entry[0]: #FML, Disable updating of Commands.py
+ print 'Update to runtime/commands.py found, but disbled due to using fml'
+ continue
if entry[3] == 'U':
self.logger.info('Retrieving file from server : %s', entry[0])
cur_file = os.path.normpath(entry[0])
@@ -1614,6 +1647,9 @@
md5reoblk = {CLIENT: self.md5reobfclient, SERVER: self.md5reobfserver}
outpathlk = {CLIENT: self.srcmodclient, SERVER: self.srcmodserver}
src = {CLIENT: self.srcclient, SERVER: self.srcserver}
+
+ if side == SERVER: #Noop out server side stuff
+ return
# HINT: We need a table for the old md5 and the new ones
md5table = {}
@@ -1656,3 +1692,6 @@
except IOError:
self.logger.error('* File %s copy failed', in_class)
+def commands_sanity_check():
+ print 'Commands patch applied successfully'
+
@@ -1,12 +0,0 @@
package cpw.mods.fml.common;
/**
* A marker interface for retrieving a proxy to a bukkit plugin.
* Fields associated with {@link BukkitPluginRef} annotations should be should probably
* declare this type and cast down if the target is available (not null)
* @author cpw
*
*/
public interface BukkitProxy
{
}
@@ -1,16 +0,0 @@
package cpw.mods.fml.common;
import java.io.File;
import java.util.List;
import com.google.common.collect.SetMultimap;
public class DuplicateModsFoundException extends LoaderException {
public SetMultimap<ModContainer,File> dupes;
public DuplicateModsFoundException(SetMultimap<ModContainer, File> dupes) {
this.dupes = dupes;
}
}
@@ -1,24 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.common;
/**
* @author cpw
*
*/
public interface IConsoleHandler
{
public boolean handleCommand(String command, Object... data);
}
@@ -1,43 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.common;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
/**
* Return a crafting handler for the mod container to call
*
* @author cpw
*
*/
public interface ICraftingHandler
{
/**
* The object array contains these three arguments
*
* @param player
* @param item
* @param craftMatrix
*/
void onCrafting(EntityPlayer player, ItemStack item, IInventory craftMatrix);
/**
* The object array contains these two arguments
* @param player
* @param item
*/
void onSmelting(EntityPlayer player, ItemStack item);
}
@@ -1,8 +0,0 @@
package cpw.mods.fml.common;
import java.util.concurrent.Callable;
public interface ICrashCallable extends Callable<String>
{
String getLabel();
}
@@ -1,48 +0,0 @@
/*
* The FML Forge Mod Loader suite. Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.common;
import java.util.Random;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
/**
* Deprecated without replacement, use vanilla DispenserRegistry code
*
* @author cpw
*
*/
@Deprecated
public interface IDispenseHandler
{
/**
* Return -1 if you don't want to dispense anything. the other values seem to have specific meanings
* to blockdispenser.
*
* @param x
* @param y
* @param z
* @param xVelocity
* @param zVelocity
* @param world
* @param item
* @param random
* @param entX
* @param entY
* @param entZ
*/
@Deprecated
int dispense(double x, double y, double z, int xVelocity, int zVelocity, World world, ItemStack item, Random random, double entX, double entY, double entZ);
}
@@ -1,33 +0,0 @@
package cpw.mods.fml.common;
import java.util.Random;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
/**
*
* Deprecated without replacement. Use vanilla DispenserRegistry code.
*
* @author cpw
*
*/
@Deprecated
public interface IDispenserHandler
{
/**
* Called to dispense an entity
* @param x
* @param y
* @param z
* @param xVelocity
* @param zVelocity
* @param world
* @param item
* @param random
* @param entX
* @param entY
* @param entZ
*/
int dispense(int x, int y, int z, int xVelocity, int zVelocity, World world, ItemStack item, Random random, double entX, double entY, double entZ);
}
@@ -1,6 +0,0 @@
package cpw.mods.fml.common;
public interface IFMLHandledException
{
}
@@ -1,8 +0,0 @@
package cpw.mods.fml.common;
import net.minecraft.item.ItemStack;
public interface IFuelHandler
{
int getBurnTime(ItemStack fuel);
}
@@ -1,22 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.common;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
public interface IPickupNotifier
{
void notifyPickup(EntityItem item, EntityPlayer player);
}
@@ -1,32 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.common;
import net.minecraft.entity.player.EntityPlayer;
/**
* @author cpw
*
*/
public interface IPlayerTracker
{
void onPlayerLogin(EntityPlayer player);
void onPlayerLogout(EntityPlayer player);
void onPlayerChangedDimension(EntityPlayer player);
void onPlayerRespawn(EntityPlayer player);
}
@@ -1,12 +0,0 @@
package cpw.mods.fml.common;
public interface IScheduledTickHandler extends ITickHandler
{
/**
* Return the number of actual ticks that will pass
* before your next tick will fire. This will be called
* just after your last tick fired to compute the next delay.
* @return Time until next tick
*/
public int nextTickSpacing();
}
@@ -1,31 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.common;
public class LoaderException extends RuntimeException
{
/**
*
*/
private static final long serialVersionUID = -5675297950958861378L;
public LoaderException(Throwable wrapped)
{
super(wrapped);
}
public LoaderException()
{
}
}
@@ -1,14 +0,0 @@
package cpw.mods.fml.common;
import com.google.common.eventbus.EventBus;
public class MCPDummyContainer extends DummyModContainer {
public MCPDummyContainer(ModMetadata metadata) {
super(metadata);
}
@Override
public boolean registerBus(EventBus bus, LoadController controller) {
return true;
}
}
-248
View File
@@ -1,248 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.common;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import net.minecraft.item.ItemBlock;
import cpw.mods.fml.common.event.FMLInterModComms;
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
/**
* The new mod style in FML 1.3
*
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Mod
{
/**
* The unique mod identifier for this mod
*/
String modid();
/**
* A user friendly name for the mod
*/
String name() default "";
/**
* A version string for this mod
*/
String version() default "";
/**
* A simple dependency string for this mod (see modloader's "priorities" string specification)
*/
String dependencies() default "";
/**
* Whether to use the mcmod.info metadata by default for this mod.
* If true, settings in the mcmod.info file will override settings in these annotations.
*/
boolean useMetadata() default false;
/**
* The acceptable range of minecraft versions that this mod will load and run in
* The default ("empty string") indicates that only the current minecraft version is acceptable.
* FML will refuse to run with an error if the minecraft version is not in this range across all mods.
* @return A version range as specified by the maven version range specification or the empty string
*/
String acceptedMinecraftVersions() default "";
/**
* 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.
* @return The name of the plugin to load for this mod
*/
String bukkitPlugin() default "";
/**
* 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.
* Entries can be prefixed with a + for a positive exclusion assertion, or - for a negative exclusion
* assertion. Asterisk is the wildcard and represents <strong>all</strong> mods.
*
* The <strong>only</strong> mods that cannot be excluded are FML and MCP, trivially.
* Other special values:
* <ul>
* <li>+f indicates that the mod will accept a minecraft forge environment.</li>
* <li>-* indicates that the mod will not accept any other mods.</li>
* </ul>
*
* Some examples:
* <ul>
* <li><em>-*,+f,+IronChest</em>: Will run only in a minecraft forge environment with the mod IronChests.
* The -* forces all mods to be excluded, then the +f and +IronChest add into the "allowed list".</li>
* <li><em>+f,-IC2</em>: Will run in a minecraft forge environment but will <strong>not</strong> run if
* IndustrialCraft 2 (IC2) is loaded alongside.</li>
* <li><em>-*</em>: Will not run if <strong>any</strong> othe mod is loaded except MCP/FML itself.</li>
* </ul>
*
* If a mod is present on the excluded list, the game will stop and show an error screen. If the
* class containing the {@link Mod} annotation has a "getCustomErrorException" method, it will be
* called to retrieve a custom error message for display in this case. If two mods have a declared
* exclusion which is matched, the screen that is shown is indeterminate.
*
* @return A string listing modids to exclude from loading with this mod.
*/
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>.
*
* @return A certificate fingerprint that is expected for this mod.
*/
String certificateFingerprint() default "";
/**
* 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
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface FingerprintWarning {}
/**
* Mark the designated method as being called at the "pre-initialization" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface PreInit {}
/**
* Mark the designated method as being called at the "initialization" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Init {}
/**
* Mark the designated method as being called at the "post-initialization" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface PostInit {}
/**
* Mark the designated method as being called at the "server-starting" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ServerStarting {}
/**
* Mark the designated method as being called at the "server-started" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ServerStarted {}
/**
* Mark the designated method as being called at the "server-stopping" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ServerStopping {}
/**
* Mark the designated method as being called at the "server-stopped" phase
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ServerStopped {}
/**
* Mark the designated method as the receiver for {@link FMLInterModComms} messages
* Called between {@link Init} and {@link PostInit}
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface IMCCallback {}
/**
* Populate the annotated field with the mod instance.
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Instance {
/**
* The mod object to inject into this field
*/
String value() default "";
}
/**
* Populate the annotated field with the mod's metadata.
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Metadata {
/**
* The mod id specifying the metadata to load here
*/
String value() default "";
}
/**
* Populate the annotated field with an instance of the Block as specified
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Block {
/**
* The block's name
*/
String name();
/**
* The associated ItemBlock subtype for the item (can be null for an ItemBlock)
*/
Class<?> itemTypeClass() default ItemBlock.class;
}
/**
* Populate the annotated field with an Item
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Item {
/**
* The name of the item
*/
String name();
/**
* The type of the item
*/
String typeClass();
}
}
@@ -1,89 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.common;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;
import java.util.logging.Level;
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
*
*
* @author cpw
*
*/
public class ModClassLoader extends URLClassLoader
{
private static final List<String> STANDARD_LIBRARIES = ImmutableList.of("jinput.jar", "lwjgl.jar", "lwjgl_util.jar");
private RelaunchClassLoader mainClassLoader;
public ModClassLoader(ClassLoader parent) {
super(new URL[0], null);
this.mainClassLoader = (RelaunchClassLoader)parent;
}
public void addFile(File modFile) throws MalformedURLException
{
URL url = modFile.toURI().toURL();
mainClassLoader.addURL(url);
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException
{
return mainClassLoader.loadClass(name);
}
public File[] getParentSources() {
List<URL> urls=mainClassLoader.getSources();
File[] sources=new File[urls.size()];
try
{
for (int i = 0; i<urls.size(); i++)
{
sources[i]=new File(urls.get(i).toURI());
}
return sources;
}
catch (URISyntaxException e)
{
FMLLog.log(Level.SEVERE, "Unable to process our input to locate the minecraft code", e);
throw new LoaderException(e);
}
}
public List<String> getDefaultLibraries()
{
return STANDARD_LIBRARIES;
}
public Class<? extends BaseModProxy> loadBaseModClass(String modClazzName) throws Exception
{
AccessTransformer transformer = (AccessTransformer)mainClassLoader.getTransformers().get(0);
transformer.ensurePublicAccessFor(modClazzName);
return (Class<? extends BaseModProxy>) Class.forName(modClazzName, true, this);
}
}
@@ -1,44 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.common;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author cpw
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface SidedProxy
{
/**
* The name of the client side class to load and populate
*/
String clientSide() default "";
/**
* The name of the server side class to load and populate
*/
String serverSide() default "";
/**
* The name of a special bukkit plugin class to load and populate
*/
String bukkitSide() default "";
}
-81
View File
@@ -1,81 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.common;
import java.util.EnumSet;
public enum TickType {
/**
* Fired during the world evaluation loop
* server and client side
*
* arg 0 : The world that is ticking
*/
WORLD,
/**
* client side
* Fired during the render processing phase
* arg 0 : float "partial render time"
*/
RENDER,
/**
* client side
* Fired during the render processing phase if a GUI is open
* arg 0 : float "partial render time"
* arg 1 : the open gui or null if no gui is open
*/
GUI,
/**
* client side
* Fired during the client evaluation loop
* arg 0 : The open gui or null if no gui is open
*/
CLIENTGUI,
/**
* server side
* Fired once as the world loads from disk
*/
WORLDLOAD,
/**
* client side only
* Fired once per client tick loop.
*/
CLIENT,
/**
* client and server side.
* Fired whenever the players update loop runs.
* arg 0 : the player
* arg 1 : the world the player is in
*/
PLAYER,
/**
* server side only.
* This is the server game tick.
* Fired once per tick loop on the server.
*/
SERVER;
/**
* Partner ticks that are also cancelled by returning false from onTickInGame
*/
public EnumSet<TickType> partnerTicks()
{
if (this==CLIENT) return EnumSet.of(RENDER);
if (this==RENDER) return EnumSet.of(CLIENT);
if (this==GUI) return EnumSet.of(CLIENTGUI);
if (this==CLIENTGUI) return EnumSet.of(GUI);
return EnumSet.noneOf(TickType.class);
}
}
@@ -1,13 +0,0 @@
package cpw.mods.fml.common;
import java.util.Map;
import net.minecraft.nbt.*;
import net.minecraft.world.storage.*;
public interface WorldAccessContainer
{
public NBTTagCompound getDataForWriting(SaveHandler handler, WorldInfo info);
public void readData(SaveHandler handler, WorldInfo info, Map<String,NBTBase> propertyMap, NBTTagCompound tag);
}
@@ -1,13 +0,0 @@
package cpw.mods.fml.common;
public class WrongMinecraftVersionException extends RuntimeException
{
public ModContainer mod;
public WrongMinecraftVersionException(ModContainer mod)
{
this.mod = mod;
}
}
@@ -1,129 +0,0 @@
package cpw.mods.fml.common.asm;
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream.GetField;
import java.io.StringReader;
import java.net.JarURLConnection;
import java.nio.charset.Charset;
import java.security.CodeSource;
import java.security.cert.CertPath;
import java.security.cert.CertPathValidator;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.security.cert.PKIXCertPathValidatorResult;
import java.security.cert.PKIXParameters;
import java.security.cert.TrustAnchor;
import java.security.cert.X509Certificate;
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import javax.swing.JOptionPane;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Opcodes;
import cpw.mods.fml.common.CertificateHelper;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.relauncher.IFMLCallHook;
import cpw.mods.fml.relauncher.RelaunchClassLoader;
public class FMLSanityChecker implements IFMLCallHook
{
private static final String FMLFINGERPRINT = "AE:F6:54:79:96:E9:1B:D1:59:70:6C:B4:6B:F5:4A:89:C5:CE:08:1D".toLowerCase().replace(":","");
private static final String FORGEFINGERPRINT = "DE:4C:F8:A3:F3:BC:15:63:58:10:04:4C:39:24:0B:F9:68:04:EA:7D".toLowerCase().replace(":", "");
static class MLDetectorClassVisitor extends ClassVisitor
{
private boolean foundMarker = false;
private MLDetectorClassVisitor()
{
super(Opcodes.ASM4);
}
@Override
public FieldVisitor visitField(int arg0, String arg1, String arg2, String arg3, Object arg4)
{
if ("fmlMarker".equals(arg1))
{
foundMarker = true;
}
return null;
}
}
private RelaunchClassLoader cl;
@Override
public Void call() throws Exception
{
CodeSource codeSource = getClass().getProtectionDomain().getCodeSource();
boolean goodFML = false;
if (codeSource.getLocation().getProtocol().equals("jar"))
{
Certificate[] certificates = codeSource.getCertificates();
if (certificates!=null)
{
for (Certificate cert : certificates)
{
String fingerprint = CertificateHelper.getFingerprint(cert);
if (fingerprint.equals(FMLFINGERPRINT))
{
FMLLog.info("Found valid fingerprint for FML. Certificate fingerprint %s", fingerprint);
goodFML = true;
}
else if (fingerprint.equals(FORGEFINGERPRINT))
{
FMLLog.info("Found valid fingerprint for Minecraft Forge. Certificate fingerprint %s", fingerprint);
goodFML = true;
}
else
{
FMLLog.severe("Found invalid fingerprint for FML: %s", fingerprint);
}
}
}
}
else
{
goodFML = true;
}
if (!goodFML)
{
FMLLog.severe("FML appears to be missing any signature data. This is not a good thing");
}
byte[] mlClass = cl.getClassBytes("ModLoader");
// Only care in obfuscated env
if (mlClass == null)
{
return null;
}
MLDetectorClassVisitor mlTester = new MLDetectorClassVisitor();
ClassReader cr = new ClassReader(mlClass);
cr.accept(mlTester, ClassReader.SKIP_CODE);
if (!mlTester.foundMarker)
{
JOptionPane.showMessageDialog(null, "<html>CRITICAL ERROR<br/>" +
"ModLoader was detected in this environment<br/>" +
"ForgeModLoader cannot be installed alongside ModLoader<br/>" +
"All mods should work without ModLoader being installed<br/>" +
"Because ForgeModLoader is 100% compatible with ModLoader<br/>" +
"Re-install Minecraft Forge or Forge ModLoader into a clean<br/>" +
"jar and try again.",
"ForgeModLoader critical error",
JOptionPane.ERROR_MESSAGE);
throw new RuntimeException("Invalid ModLoader class detected");
}
return null;
}
@Override
public void injectData(Map<String, Object> data)
{
cl = (RelaunchClassLoader) data.get("classLoader");
}
}
@@ -1,13 +0,0 @@
package cpw.mods.fml.common.discovery;
import java.util.List;
import java.util.regex.Pattern;
import cpw.mods.fml.common.ModContainer;
public interface ITypeDiscoverer
{
public static Pattern classFile = Pattern.compile("([^\\s$]+).class$");
public List<ModContainer> discover(ModCandidate candidate, ASMDataTable table);
}
@@ -1,15 +0,0 @@
package cpw.mods.fml.common.event;
import cpw.mods.fml.common.ModContainer;
public class FMLEvent
{
public final String getEventType()
{
return getClass().getSimpleName();
}
public void applyModContainer(ModContainer activeContainer) {
// NO OP
}
}
@@ -1,19 +0,0 @@
package cpw.mods.fml.common.event;
import cpw.mods.fml.common.LoaderState.ModState;
public class FMLInitializationEvent extends FMLStateEvent
{
public FMLInitializationEvent(Object... data)
{
super(data);
}
@Override
public ModState getModState()
{
return ModState.INITIALIZED;
}
}
@@ -1,19 +0,0 @@
package cpw.mods.fml.common.event;
import cpw.mods.fml.common.LoaderState.ModState;
public class FMLLoadCompleteEvent extends FMLStateEvent
{
public FMLLoadCompleteEvent(Object... data)
{
super(data);
}
@Override
public ModState getModState()
{
return ModState.AVAILABLE;
}
}
@@ -1,6 +0,0 @@
package cpw.mods.fml.common.event;
public class FMLLoadEvent
{
}
@@ -1,19 +0,0 @@
package cpw.mods.fml.common.event;
import cpw.mods.fml.common.LoaderState.ModState;
public class FMLServerStartedEvent extends FMLStateEvent
{
public FMLServerStartedEvent(Object... data)
{
super(data);
}
@Override
public ModState getModState()
{
return ModState.AVAILABLE;
}
}
@@ -1,18 +0,0 @@
package cpw.mods.fml.common.event;
import cpw.mods.fml.common.LoaderState;
import cpw.mods.fml.common.LoaderState.ModState;
public class FMLServerStoppedEvent extends FMLStateEvent {
public FMLServerStoppedEvent(Object... data)
{
super(data);
}
@Override
public ModState getModState()
{
return ModState.AVAILABLE;
}
}
@@ -1,19 +0,0 @@
package cpw.mods.fml.common.event;
import cpw.mods.fml.common.LoaderState.ModState;
public class FMLServerStoppingEvent extends FMLStateEvent
{
public FMLServerStoppingEvent(Object... data)
{
super(data);
}
@Override
public ModState getModState()
{
return ModState.AVAILABLE;
}
}
@@ -1,13 +0,0 @@
package cpw.mods.fml.common.functions;
import com.google.common.base.Function;
import cpw.mods.fml.common.ModContainer;
public final class ModIdFunction implements Function<ModContainer, String>
{
public String apply(ModContainer container)
{
return container.getModId();
}
}
@@ -1,15 +0,0 @@
package cpw.mods.fml.common.functions;
import com.google.common.base.Function;
import cpw.mods.fml.common.ModContainer;
public class ModNameFunction implements Function<ModContainer, String>
{
@Override
public String apply(ModContainer input)
{
return input.getName();
}
}
@@ -1,28 +0,0 @@
package cpw.mods.fml.common.modloader;
import java.util.Random;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import cpw.mods.fml.common.IDispenseHandler;
import cpw.mods.fml.common.IDispenserHandler;
public class ModLoaderDispenseHelper implements IDispenserHandler
{
private BaseModProxy mod;
public ModLoaderDispenseHelper(BaseModProxy mod)
{
this.mod = mod;
}
@Override
public int dispense(int x, int y, int z, int xVelocity, int zVelocity, World world, ItemStack item, Random random, double entX, double entY,
double entZ)
{
return -1;
}
}
@@ -1,22 +0,0 @@
package cpw.mods.fml.common.modloader;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.IFuelHandler;
public class ModLoaderFuelHelper implements IFuelHandler
{
private BaseModProxy mod;
public ModLoaderFuelHelper(BaseModProxy mod)
{
this.mod = mod;
}
@Override
public int getBurnTime(ItemStack fuel)
{
return mod.addFuel(fuel.field_77993_c, fuel.field_77993_c);
}
}
@@ -1,14 +0,0 @@
package cpw.mods.fml.common.network;
public class FMLNetworkException extends RuntimeException
{
public FMLNetworkException(Exception e)
{
super(e);
}
public FMLNetworkException()
{
}
}
@@ -1,8 +0,0 @@
package cpw.mods.fml.common.network;
import net.minecraft.network.packet.*;
public interface ITinyPacketHandler
{
void handle(NetHandler handler, Packet131MapData mapData);
}
@@ -1,11 +0,0 @@
package cpw.mods.fml.common.network;
/**
*
* @author cpw
*
*/
public interface Player
{
}
@@ -1,6 +0,0 @@
package cpw.mods.fml.common.registry;
public interface BlockProxy
{
}
@@ -1,229 +0,0 @@
package cpw.mods.fml.common.registry;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.logging.Level;
import net.minecraft.item.Item;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import com.google.common.base.Function;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.MapDifference;
import com.google.common.collect.MapDifference.ValueDifference;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.LoaderState;
import cpw.mods.fml.common.ModContainer;
public class GameData {
private static Map<Integer, ItemData> idMap = Maps.newHashMap();
private static CountDownLatch serverValidationLatch;
private static CountDownLatch clientValidationLatch;
private static MapDifference<Integer, ItemData> difference;
private static boolean shouldContinue = true;
private static boolean isSaveValid = true;
private static Map<String,String> ignoredMods;
private static boolean isModIgnoredForIdValidation(String modId)
{
if (ignoredMods == null)
{
File f = new File(Loader.instance().getConfigDir(),"fmlIDChecking.properties");
if (f.exists())
{
Properties p = new Properties();
try
{
p.load(new FileInputStream(f));
ignoredMods = Maps.fromProperties(p);
if (ignoredMods.size()>0)
{
FMLLog.warning("Using non-empty ignored mods configuration file %s", ignoredMods.keySet());
}
}
catch (Exception e)
{
Throwables.propagateIfPossible(e);
FMLLog.log(Level.SEVERE, e, "Failed to read ignored ID checker mods properties file");
ignoredMods = ImmutableMap.<String, String>of();
}
}
else
{
ignoredMods = ImmutableMap.<String, String>of();
}
}
return ignoredMods.containsKey(modId);
}
public static void newItemAdded(Item item)
{
ModContainer mc = Loader.instance().activeModContainer();
if (mc == null)
{
mc = Loader.instance().getMinecraftModContainer();
if (Loader.instance().hasReachedState(LoaderState.AVAILABLE))
{
FMLLog.severe("It appears something has tried to allocate an Item outside of the initialization phase of Minecraft, this could be very bad for your network connectivity.");
}
}
String itemType = item.getClass().getName();
ItemData itemData = new ItemData(item, mc);
if (idMap.containsKey(item.field_77779_bT))
{
ItemData id = idMap.get(item.field_77779_bT);
FMLLog.info("[ItemTracker] The mod %s is overwriting existing item at %d (%s from %s) with %s", mc.getModId(), id.getItemId(), id.getItemType(), id.getModId(), itemType);
}
idMap.put(item.field_77779_bT, itemData);
if (!"Minecraft".equals(mc.getModId()))
{
FMLLog.fine("[ItemTracker] Adding item %s(%d) owned by %s", item.getClass().getName(), item.field_77779_bT, mc.getModId());
}
}
public static void validateWorldSave(Set<ItemData> worldSaveItems)
{
isSaveValid = true;
shouldContinue = true;
// allow ourselves to continue if there's no saved data
if (worldSaveItems == null)
{
serverValidationLatch.countDown();
try
{
clientValidationLatch.await();
}
catch (InterruptedException e)
{
}
return;
}
Function<? super ItemData, Integer> idMapFunction = new Function<ItemData, Integer>() {
public Integer apply(ItemData input) {
return input.getItemId();
};
};
Map<Integer,ItemData> worldMap = Maps.uniqueIndex(worldSaveItems,idMapFunction);
difference = Maps.difference(worldMap, idMap);
FMLLog.fine("The difference set is %s", difference);
if (!difference.entriesDiffering().isEmpty() || !difference.entriesOnlyOnLeft().isEmpty())
{
FMLLog.severe("FML has detected item discrepancies");
FMLLog.severe("Missing items : %s", difference.entriesOnlyOnLeft());
FMLLog.severe("Mismatched items : %s", difference.entriesDiffering());
boolean foundNonIgnored = false;
for (ItemData diff : difference.entriesOnlyOnLeft().values())
{
if (!isModIgnoredForIdValidation(diff.getModId()))
{
foundNonIgnored = true;
}
}
for (ValueDifference<ItemData> diff : difference.entriesDiffering().values())
{
if (! ( isModIgnoredForIdValidation(diff.leftValue().getModId()) || isModIgnoredForIdValidation(diff.rightValue().getModId()) ) )
{
foundNonIgnored = true;
}
}
if (!foundNonIgnored)
{
FMLLog.severe("FML is ignoring these ID discrepancies because of configuration. YOUR GAME WILL NOW PROBABLY CRASH. HOPEFULLY YOU WON'T HAVE CORRUPTED YOUR WORLD. BLAME %s", ignoredMods.keySet());
}
isSaveValid = !foundNonIgnored;
serverValidationLatch.countDown();
}
else
{
isSaveValid = true;
serverValidationLatch.countDown();
}
try
{
clientValidationLatch.await();
if (!shouldContinue)
{
throw new RuntimeException("This server instance is going to stop abnormally because of a fatal ID mismatch");
}
}
catch (InterruptedException e)
{
}
}
public static void writeItemData(NBTTagList itemList)
{
for (ItemData dat : idMap.values())
{
itemList.func_74742_a(dat.toNBT());
}
}
/**
* Initialize the server gate
* @param gateCount the countdown amount. If it's 2 we're on the client and the client and server
* will wait at the latch. 1 is a server and the server will proceed
*/
public static void initializeServerGate(int gateCount)
{
serverValidationLatch = new CountDownLatch(gateCount - 1);
clientValidationLatch = new CountDownLatch(gateCount - 1);
}
public static MapDifference<Integer, ItemData> gateWorldLoadingForValidation()
{
try
{
serverValidationLatch.await();
if (!isSaveValid)
{
return difference;
}
}
catch (InterruptedException e)
{
}
difference = null;
return null;
}
public static void releaseGate(boolean carryOn)
{
shouldContinue = carryOn;
clientValidationLatch.countDown();
}
public static Set<ItemData> buildWorldItemData(NBTTagList modList)
{
Set<ItemData> worldSaveItems = Sets.newHashSet();
for (int i = 0; i < modList.func_74745_c(); i++)
{
NBTTagCompound mod = (NBTTagCompound) modList.func_74743_b(i);
ItemData dat = new ItemData(mod);
worldSaveItems.add(dat);
}
return worldSaveItems;
}
static void setName(Item item, String name, String modId)
{
int id = item.field_77779_bT;
ItemData itemData = idMap.get(id);
itemData.setName(name,modId);
}
}
@@ -1,6 +0,0 @@
package cpw.mods.fml.common.registry;
public interface ItemProxy
{
}
@@ -1,11 +0,0 @@
package cpw.mods.fml.relauncher;
public class ArgsWrapper
{
public ArgsWrapper(String[] args)
{
this.args=args;
}
public String[] args;
}
@@ -1,26 +0,0 @@
package cpw.mods.fml.relauncher;
public class CoreFMLLibraries implements ILibrarySet
{
private static String[] libraries = { "argo-2.25.jar","guava-12.0.1.jar","asm-all-4.0.jar", "bcprov-jdk15on-147.jar" };
private static String[] checksums = { "bb672829fde76cb163004752b86b0484bd0a7f4b", "b8e78b9af7bf45900e14c6f958486b6ca682195f", "98308890597acb64047f7e896638e0d98753ae82", "b6f5d9926b0afbde9f4dbe3db88c5247be7794bb" };
@Override
public String[] getLibraries()
{
return libraries;
}
@Override
public String[] getHashes()
{
return checksums;
}
@Override
public String getRootURL()
{
return "http://files.minecraftforge.net/fmllibs/%s";
}
}
@@ -1,140 +0,0 @@
package cpw.mods.fml.relauncher;
import java.awt.Dialog.ModalityType;
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.Box;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import cpw.mods.fml.common.FMLLog;
public class Downloader extends JOptionPane implements IDownloadDisplay
{
private JDialog container;
private JLabel currentActivity;
private JProgressBar progress;
boolean stopIt;
Thread pokeThread;
private Box makeProgressPanel()
{
Box box = Box.createVerticalBox();
box.add(Box.createRigidArea(new Dimension(0,10)));
JLabel welcomeLabel = new JLabel("<html><b><font size='+1'>FML is setting up your minecraft environment</font></b></html>");
box.add(welcomeLabel);
welcomeLabel.setAlignmentY(LEFT_ALIGNMENT);
welcomeLabel = new JLabel("<html>Please wait, FML has some tasks to do before you can play</html>");
welcomeLabel.setAlignmentY(LEFT_ALIGNMENT);
box.add(welcomeLabel);
box.add(Box.createRigidArea(new Dimension(0,10)));
currentActivity = new JLabel("Currently doing ...");
box.add(currentActivity);
box.add(Box.createRigidArea(new Dimension(0,10)));
progress = new JProgressBar(0, 100);
progress.setStringPainted(true);
box.add(progress);
box.add(Box.createRigidArea(new Dimension(0,30)));
return box;
}
public JDialog makeDialog()
{
setMessageType(JOptionPane.INFORMATION_MESSAGE);
setMessage(makeProgressPanel());
setOptions(new Object[] { "Stop" });
addPropertyChangeListener(new PropertyChangeListener()
{
@Override
public void propertyChange(PropertyChangeEvent evt)
{
if (evt.getSource() == Downloader.this && evt.getPropertyName()==VALUE_PROPERTY)
{
requestClose("This will stop minecraft from launching\nAre you sure you want to do this?");
}
}
});
container = new JDialog(null, "Hello", ModalityType.MODELESS);
container.setResizable(false);
container.setLocationRelativeTo(null);
container.add(this);
this.updateUI();
container.pack();
container.setMinimumSize(container.getPreferredSize());
container.setVisible(true);
container.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
container.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
requestClose("Closing this window will stop minecraft from launching\nAre you sure you wish to do this?");
}
});
return container;
}
protected void requestClose(String message)
{
int shouldClose = JOptionPane.showConfirmDialog(container, message, "Are you sure you want to stop?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (shouldClose == JOptionPane.YES_OPTION)
{
container.dispose();
}
stopIt = true;
if (pokeThread != null)
{
pokeThread.interrupt();
}
}
public void updateProgressString(String progressUpdate, Object... data)
{
FMLLog.finest(progressUpdate, data);
if (currentActivity!=null)
{
currentActivity.setText(String.format(progressUpdate,data));
}
}
public void resetProgress(int sizeGuess)
{
if (progress!=null)
{
progress.getModel().setRangeProperties(0, 0, 0, sizeGuess, false);
}
}
public void updateProgress(int fullLength)
{
if (progress!=null)
{
progress.getModel().setValue(fullLength);
}
}
public void makeHeadless()
{
container = null;
progress = null;
currentActivity = null;
}
@Override
public void setPokeThread(Thread currentThread)
{
this.pokeThread = currentThread;
}
@Override
public boolean shouldStopIt()
{
return stopIt;
}
}
@@ -1,55 +0,0 @@
package cpw.mods.fml.relauncher;
public class DummyDownloader implements IDownloadDisplay
{
@Override
public void resetProgress(int sizeGuess)
{
// TODO Auto-generated method stub
}
@Override
public void setPokeThread(Thread currentThread)
{
// TODO Auto-generated method stub
}
@Override
public void updateProgress(int fullLength)
{
// TODO Auto-generated method stub
}
@Override
public boolean shouldStopIt()
{
// TODO Auto-generated method stub
return false;
}
@Override
public void updateProgressString(String string, Object... data)
{
// TODO Auto-generated method stub
}
@Override
public Object makeDialog()
{
// TODO Auto-generated method stub
return null;
}
@Override
public void makeHeadless()
{
// TODO Auto-generated method stub
}
}
@@ -1,317 +0,0 @@
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
*/
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,6 +0,0 @@
package cpw.mods.fml.relauncher;
public interface IClassTransformer
{
public byte[] transform(String name, byte[] bytes);
}
@@ -1,22 +0,0 @@
package cpw.mods.fml.relauncher;
import javax.swing.JDialog;
public interface IDownloadDisplay
{
void resetProgress(int sizeGuess);
void setPokeThread(Thread currentThread);
void updateProgress(int fullLength);
boolean shouldStopIt();
void updateProgressString(String string, Object ... data);
Object makeDialog();
void makeHeadless();
}
@@ -1,332 +0,0 @@
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 static Manifest EMPTY = new Manifest();
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("org.objectweb.asm.");
addTransformerExclusion("com.google.common.");
}
public void registerTransformer(String transformerClassName)
{
try
{
transformers.add((IClassTransformer) loadClass(transformerClassName).newInstance());
}
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;
int lastDot = name.lastIndexOf('.');
String pkgname = lastDot == -1 ? "" : name.substring(0, lastDot);
String fName = name.replace('.', '/').concat(".class");
String pkgPath = pkgname.replace('.', '/');
URLConnection urlConnection = findCodeSourceConnectionFor(fName);
if (urlConnection instanceof JarURLConnection && lastDot > -1)
{
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(name);
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)
{
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(name);
byte[] transformedClass = runTransformers(name, basicClass);
Class<?> cl = defineClass(name, transformedClass, 0, transformedClass.length, new CodeSource(urlConnection.getURL(), signers));
cachedClasses.put(name, 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 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, byte[] basicClass)
{
for (IClassTransformer transformer : transformers)
{
basicClass = transformer.transform(name, 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
{
ByteArrayOutputStream bos = new ByteArrayOutputStream(stream.available());
int r;
while ((r = stream.read()) != -1)
{
bos.write(r);
}
return bos.toByteArray();
}
catch (Throwable t)
{
FMLLog.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
}
}
}
}
}
@@ -1,565 +0,0 @@
package cpw.mods.fml.relauncher;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileChannel.MapMode;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.logging.Level;
import cpw.mods.fml.common.CertificateHelper;
import cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions;
public class RelaunchLibraryManager
{
private static String[] rootPlugins = { "cpw.mods.fml.relauncher.FMLCorePlugin" , "net.minecraftforge.classloading.FMLForgePlugin" };
private static List<String> loadedLibraries = new ArrayList<String>();
private static Map<IFMLLoadingPlugin, File> pluginLocations;
private static List<IFMLLoadingPlugin> loadPlugins;
private static List<ILibrarySet> libraries;
public static void handleLaunch(File mcDir, RelaunchClassLoader actualClassLoader)
{
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();
loadPlugins.add(plugin);
for (String libName : plugin.getLibraryRequestClass())
{
libraries.add((ILibrarySet) Class.forName(libName, true, actualClassLoader).newInstance());
}
}
catch (Exception e)
{
// HMMM
}
}
if (loadPlugins.isEmpty())
{
throw new RuntimeException("A fatal error has occured - no valid fml load plugin was found - this is a completely corrupt FML installation.");
}
downloadMonitor.updateProgressString("All core mods are successfully located");
// Now that we have the root plugins loaded - lets see what else might be around
String commandLineCoremods = System.getProperty("fml.coreMods.load","");
for (String s : commandLineCoremods.split(","))
{
if (s.isEmpty())
{
continue;
}
FMLRelaunchLog.info("Found a command line coremod : %s", s);
try
{
actualClassLoader.addTransformerExclusion(s);
Class<?> coreModClass = Class.forName(s, true, actualClassLoader);
TransformerExclusions trExclusions = coreModClass.getAnnotation(IFMLLoadingPlugin.TransformerExclusions.class);
if (trExclusions!=null)
{
for (String st : trExclusions.value())
{
actualClassLoader.addTransformerExclusion(st);
}
}
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) coreModClass.newInstance();
loadPlugins.add(plugin);
if (plugin.getLibraryRequestClass()!=null)
{
for (String libName : plugin.getLibraryRequestClass())
{
libraries.add((ILibrarySet) Class.forName(libName, true, actualClassLoader).newInstance());
}
}
}
catch (Throwable e)
{
FMLRelaunchLog.log(Level.SEVERE,e,"Exception occured trying to load coremod %s",s);
throw new RuntimeException(e);
}
}
discoverCoreMods(mcDir, actualClassLoader, loadPlugins, libraries);
List<Throwable> caughtErrors = new ArrayList<Throwable>();
try
{
File libDir;
try
{
libDir = setupLibDir(mcDir);
}
catch (Exception e)
{
caughtErrors.add(e);
return;
}
for (ILibrarySet lib : libraries)
{
for (int i=0; i<lib.getLibraries().length; i++)
{
boolean download = false;
String libName = lib.getLibraries()[i];
String targFileName = libName.lastIndexOf('/')>=0 ? libName.substring(libName.lastIndexOf('/')) : libName;
String checksum = lib.getHashes()[i];
File libFile = new File(libDir, targFileName);
if (!libFile.exists())
{
try
{
downloadFile(libFile, lib.getRootURL(), libName, checksum);
download = true;
}
catch (Throwable e)
{
caughtErrors.add(e);
continue;
}
}
if (libFile.exists() && !libFile.isFile())
{
caughtErrors.add(new RuntimeException(String.format("Found a file %s that is not a normal file - you should clear this out of the way", libName)));
continue;
}
if (!download)
{
try
{
FileInputStream fis = new FileInputStream(libFile);
FileChannel chan = fis.getChannel();
MappedByteBuffer mappedFile = chan.map(MapMode.READ_ONLY, 0, libFile.length());
String fileChecksum = generateChecksum(mappedFile);
fis.close();
// bad checksum and I did not download this file
if (!checksum.equals(fileChecksum))
{
caughtErrors.add(new RuntimeException(String.format("The file %s was found in your lib directory and has an invalid checksum %s (expecting %s) - it is unlikely to be the correct download, please move it out of the way and try again.", libName, fileChecksum, checksum)));
continue;
}
}
catch (Exception e)
{
FMLRelaunchLog.log(Level.SEVERE, e, "The library file %s could not be validated", libFile.getName());
caughtErrors.add(new RuntimeException(String.format("The library file %s could not be validated", libFile.getName()),e));
continue;
}
}
if (!download)
{
downloadMonitor.updateProgressString("Found library file %s present and correct in lib dir", libName);
}
else
{
downloadMonitor.updateProgressString("Library file %s was downloaded and verified successfully", libName);
}
try
{
actualClassLoader.addURL(libFile.toURI().toURL());
loadedLibraries.add(libName);
}
catch (MalformedURLException e)
{
caughtErrors.add(new RuntimeException(String.format("Should never happen - %s is broken - probably a somehow corrupted download. Delete it and try again.", libFile.getName()), e));
}
}
}
}
finally
{
if (downloadMonitor.shouldStopIt())
{
return;
}
if (!caughtErrors.isEmpty())
{
FMLRelaunchLog.severe("There were errors during initial FML setup. " +
"Some files failed to download or were otherwise corrupted. " +
"You will need to manually obtain the following files from " +
"these download links and ensure your lib directory is clean. ");
for (ILibrarySet set : libraries)
{
for (String file : set.getLibraries())
{
FMLRelaunchLog.severe("*** Download "+set.getRootURL(), file);
}
}
FMLRelaunchLog.severe("<===========>");
FMLRelaunchLog.severe("The following is the errors that caused the setup to fail. " +
"They may help you diagnose and resolve the issue");
for (Throwable t : caughtErrors)
{
if (t.getMessage()!=null)
{
FMLRelaunchLog.severe(t.getMessage());
}
}
FMLRelaunchLog.severe("<<< ==== >>>");
FMLRelaunchLog.severe("The following is diagnostic information for developers to review.");
for (Throwable t : caughtErrors)
{
FMLRelaunchLog.log(Level.SEVERE, t, "Error details");
}
throw new RuntimeException("A fatal error occured and FML cannot continue");
}
}
for (IFMLLoadingPlugin plug : loadPlugins)
{
if (plug.getASMTransformerClass()!=null)
{
for (String xformClass : plug.getASMTransformerClass())
{
actualClassLoader.registerTransformer(xformClass);
}
}
}
downloadMonitor.updateProgressString("Running coremod plugins");
Map<String,Object> data = new HashMap<String,Object>();
data.put("mcLocation", mcDir);
data.put("coremodList", loadPlugins);
for (IFMLLoadingPlugin plugin : loadPlugins)
{
downloadMonitor.updateProgressString("Running coremod plugin %s", plugin.getClass().getSimpleName());
data.put("coremodLocation", pluginLocations.get(plugin));
plugin.injectData(data);
String setupClass = plugin.getSetupClass();
if (setupClass != null)
{
try
{
IFMLCallHook call = (IFMLCallHook) Class.forName(setupClass, true, actualClassLoader).newInstance();
Map<String,Object> callData = new HashMap<String, Object>();
callData.put("classLoader", actualClassLoader);
call.injectData(callData);
call.call();
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
downloadMonitor.updateProgressString("Coremod plugin %s run successfully", plugin.getClass().getSimpleName());
String modContainer = plugin.getModContainerClass();
if (modContainer != null)
{
FMLInjectionData.containers.add(modContainer);
}
}
try
{
downloadMonitor.updateProgressString("Validating minecraft");
Class<?> loaderClazz = Class.forName("cpw.mods.fml.common.Loader", true, actualClassLoader);
Method m = loaderClazz.getMethod("injectData", Object[].class);
m.invoke(null, (Object)FMLInjectionData.data());
m = loaderClazz.getMethod("instance");
m.invoke(null);
downloadMonitor.updateProgressString("Minecraft validated, launching...");
downloadBuffer = null;
}
catch (Exception e)
{
// Load in the Loader, make sure he's ready to roll - this will initialize most of the rest of minecraft here
System.out.println("A CRITICAL PROBLEM OCCURED INITIALIZING MINECRAFT - LIKELY YOU HAVE AN INCORRECT VERSION FOR THIS FML");
throw new RuntimeException(e);
}
}
private static void discoverCoreMods(File mcDir, RelaunchClassLoader classLoader, List<IFMLLoadingPlugin> loadPlugins, List<ILibrarySet> libraries)
{
downloadMonitor.updateProgressString("Discovering coremods");
File coreMods = setupCoreModDir(mcDir);
FilenameFilter ff = new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return name.endsWith(".jar");
}
};
File[] coreModList = coreMods.listFiles(ff);
Arrays.sort(coreModList);
for (File coreMod : coreModList)
{
downloadMonitor.updateProgressString("Found a candidate coremod %s", coreMod.getName());
JarFile jar;
Attributes mfAttributes;
try
{
jar = new JarFile(coreMod);
mfAttributes = jar.getManifest().getMainAttributes();
}
catch (IOException ioe)
{
FMLRelaunchLog.log(Level.SEVERE, ioe, "Unable to read the coremod jar file %s - ignoring", coreMod.getName());
continue;
}
String fmlCorePlugin = mfAttributes.getValue("FMLCorePlugin");
if (fmlCorePlugin == null)
{
FMLRelaunchLog.severe("The coremod %s does not contain a valid jar manifest- it will be ignored", coreMod.getName());
continue;
}
// String className = fmlCorePlugin.replace('.', '/').concat(".class");
// JarEntry ent = jar.getJarEntry(className);
// if (ent ==null)
// {
// FMLLog.severe("The coremod %s specified %s as it's loading class but it does not include it - it will be ignored", coreMod.getName(), fmlCorePlugin);
// continue;
// }
// try
// {
// Class<?> coreModClass = Class.forName(fmlCorePlugin, false, classLoader);
// FMLLog.severe("The coremods %s specified a class %s that is already present in the classpath - it will be ignored", coreMod.getName(), fmlCorePlugin);
// continue;
// }
// catch (ClassNotFoundException cnfe)
// {
// // didn't find it, good
// }
try
{
classLoader.addURL(coreMod.toURI().toURL());
}
catch (MalformedURLException e)
{
FMLRelaunchLog.log(Level.SEVERE, e, "Unable to convert file into a URL. weird");
continue;
}
try
{
downloadMonitor.updateProgressString("Loading coremod %s", coreMod.getName());
classLoader.addTransformerExclusion(fmlCorePlugin);
Class<?> coreModClass = Class.forName(fmlCorePlugin, true, classLoader);
TransformerExclusions trExclusions = coreModClass.getAnnotation(IFMLLoadingPlugin.TransformerExclusions.class);
if (trExclusions!=null)
{
for (String st : trExclusions.value())
{
classLoader.addTransformerExclusion(st);
}
}
IFMLLoadingPlugin plugin = (IFMLLoadingPlugin) coreModClass.newInstance();
loadPlugins.add(plugin);
pluginLocations .put(plugin, coreMod);
if (plugin.getLibraryRequestClass()!=null)
{
for (String libName : plugin.getLibraryRequestClass())
{
libraries.add((ILibrarySet) Class.forName(libName, true, classLoader).newInstance());
}
}
downloadMonitor.updateProgressString("Loaded coremod %s", coreMod.getName());
}
catch (ClassNotFoundException cnfe)
{
FMLRelaunchLog.log(Level.SEVERE, cnfe, "Coremod %s: Unable to class load the plugin %s", coreMod.getName(), fmlCorePlugin);
}
catch (ClassCastException cce)
{
FMLRelaunchLog.log(Level.SEVERE, cce, "Coremod %s: The plugin %s is not an implementor of IFMLLoadingPlugin", coreMod.getName(), fmlCorePlugin);
}
catch (InstantiationException ie)
{
FMLRelaunchLog.log(Level.SEVERE, ie, "Coremod %s: The plugin class %s was not instantiable", coreMod.getName(), fmlCorePlugin);
}
catch (IllegalAccessException iae)
{
FMLRelaunchLog.log(Level.SEVERE, iae, "Coremod %s: The plugin class %s was not accessible", coreMod.getName(), fmlCorePlugin);
}
}
}
/**
* @param mcDir
* @return
*/
private static File setupLibDir(File mcDir)
{
File libDir = new File(mcDir,"lib");
try
{
libDir = libDir.getCanonicalFile();
}
catch (IOException e)
{
throw new RuntimeException(String.format("Unable to canonicalize the lib dir at %s", mcDir.getName()),e);
}
if (!libDir.exists())
{
libDir.mkdir();
}
else if (libDir.exists() && !libDir.isDirectory())
{
throw new RuntimeException(String.format("Found a lib file in %s that's not a directory", mcDir.getName()));
}
return libDir;
}
/**
* @param mcDir
* @return
*/
private static File setupCoreModDir(File mcDir)
{
File coreModDir = new File(mcDir,"coremods");
try
{
coreModDir = coreModDir.getCanonicalFile();
}
catch (IOException e)
{
throw new RuntimeException(String.format("Unable to canonicalize the coremod dir at %s", mcDir.getName()),e);
}
if (!coreModDir.exists())
{
coreModDir.mkdir();
}
else if (coreModDir.exists() && !coreModDir.isDirectory())
{
throw new RuntimeException(String.format("Found a coremod file in %s that's not a directory", mcDir.getName()));
}
return coreModDir;
}
private static void downloadFile(File libFile, String rootUrl,String realFilePath, String hash)
{
try
{
URL libDownload = new URL(String.format(rootUrl,realFilePath));
downloadMonitor.updateProgressString("Downloading file %s", libDownload.toString());
FMLRelaunchLog.info("Downloading file %s", libDownload.toString());
URLConnection connection = libDownload.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setRequestProperty("User-Agent", "FML Relaunch Downloader");
int sizeGuess = connection.getContentLength();
performDownload(connection.getInputStream(), sizeGuess, hash, libFile);
downloadMonitor.updateProgressString("Download complete");
FMLRelaunchLog.info("Download complete");
}
catch (Exception e)
{
if (downloadMonitor.shouldStopIt())
{
FMLRelaunchLog.warning("You have stopped the downloading operation before it could complete");
return;
}
if (e instanceof RuntimeException) throw (RuntimeException)e;
FMLRelaunchLog.severe("There was a problem downloading the file %s automatically. Perhaps you " +
"have an environment without internet access. You will need to download " +
"the file manually or restart and let it try again\n", libFile.getName());
libFile.delete();
throw new RuntimeException("A download error occured", e);
}
}
public static List<String> getLibraries()
{
return loadedLibraries;
}
private static ByteBuffer downloadBuffer = ByteBuffer.allocateDirect(1 << 22);
static IDownloadDisplay downloadMonitor;
private static void performDownload(InputStream is, int sizeGuess, String validationHash, File target)
{
if (sizeGuess > downloadBuffer.capacity())
{
throw new RuntimeException(String.format("The file %s is too large to be downloaded by FML - the coremod is invalid", target.getName()));
}
downloadBuffer.clear();
int bytesRead, fullLength = 0;
downloadMonitor.resetProgress(sizeGuess);
try
{
downloadMonitor.setPokeThread(Thread.currentThread());
byte[] smallBuffer = new byte[1024];
while ((bytesRead = is.read(smallBuffer)) >= 0) {
downloadBuffer.put(smallBuffer, 0, bytesRead);
fullLength += bytesRead;
if (downloadMonitor.shouldStopIt())
{
break;
}
downloadMonitor.updateProgress(fullLength);
}
is.close();
downloadMonitor.setPokeThread(null);
downloadBuffer.limit(fullLength);
downloadBuffer.position(0);
}
catch (InterruptedIOException e)
{
// We were interrupted by the stop button. We're stopping now.. clear interruption flag.
Thread.interrupted();
return;
}
catch (IOException e)
{
throw new RuntimeException(e);
}
try
{
String cksum = generateChecksum(downloadBuffer);
if (cksum.equals(validationHash))
{
downloadBuffer.position(0);
FileOutputStream fos = new FileOutputStream(target);
fos.getChannel().write(downloadBuffer);
fos.close();
}
else
{
throw new RuntimeException(String.format("The downloaded file %s has an invalid checksum %s (expecting %s). The download did not succeed correctly and the file has been deleted. Please try launching again.", target.getName(), cksum, validationHash));
}
}
catch (Exception e)
{
if (e instanceof RuntimeException) throw (RuntimeException)e;
throw new RuntimeException(e);
}
}
private static String generateChecksum(ByteBuffer buffer)
{
return CertificateHelper.getFingerprint(buffer);
}
}
-35
View File
@@ -1,35 +0,0 @@
/*
* The FML Forge Mod Loader suite.
* Copyright (C) 2012 cpw
*
* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package cpw.mods.fml.relauncher;
public enum Side {
CLIENT, SERVER, BUKKIT;
/**
* @return If this is the server environment
*/
public boolean isServer()
{
return !isClient();
}
/**
* @return if this is the Client environment
*/
public boolean isClient()
{
return this == CLIENT;
}
}
@@ -1,14 +0,0 @@
package cpw.mods.fml.relauncher;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR})
public @interface SideOnly
{
public Side value();
}
-73
View File
@@ -1,73 +0,0 @@
#Main FML Access Transformer configuration file
# TileEntity addMapping
public aox.a(Ljava/lang/Class;Ljava/lang/String;)V #MD:TileEntity/func_70306_a
# EntityList addMappings
public ma.a(Ljava/lang/Class;Ljava/lang/String;I)V #MD:EntityList/func_75618_a
public ma.a(Ljava/lang/Class;Ljava/lang/String;III)V #MD:EntityList/func_75614_a
public ma.b #FD:EntityList/field_75625_b #nameToClassMap
public ma.c #FD:EntityList/field_75626_c #classToNameMap
public ma.d #FD:EntityList/field_75623_d #idToClassMap
# RenderEngine
#public bba.h #FD:RenderEngine/field_78367_h #textureList # -- MISSING MAPPING # -- MISSING MAPPING
public bcd.j #FD:RenderEngine/field_78366_k #texturePack
# RenderManager
public bcx.p #FD:RenderManager/field_78729_o #renderers
# RenderBlocks - everything
public bce.* #FD:RenderBlocks/*
public bce.*() #MD:RenderBlocks/*
#RenderPlayer
public-f bdr.h #FD:RenderPlayer/field_77110_j #armorlist
#RenderBiped
public-f bdf.k #FD:RenderBiped/field_82424_k #armorlist
#StringTranslate
public bn.b #FD:StringTranslate/field_74815_b
public bn.e #FD:StringTranslate/field_74813_d
# TileEntityRenderer
public bfa.m #FD:TileEntityRenderer/field_76966_m
# CraftingManager - make the add recipe methods public
public wy.a(Lvc;[Ljava/lang/Object;)Lxb; #MD:CraftingManager/func_92103_a
public wy.b(Lvc;[Ljava/lang/Object;)V #MD:CraftingManager/func_77596_b
# WeightedRandomItem
public kv.a #FD:WeightedRandomItem/field_76292_a #probability
# ItemStack
#public+f tv.c #FD:ItemStack/field_77993_c #itemId
# StatBase
public jl.a #FD:StatBase/field_75978_a #statName
# NetLoginHandler
public it.a(Lit;Z)Z #MD:NetLoginHandler/func_72531_a #'complete connection'
public it.h #FD:NetLoginHandler/field_72543_h #userName
# EntityPlayerMP getNextWindowId
public iq.cl()V #MD:EntityPlayerMP/func_71117_bO
public iq.cu #FD:EntityPlayerMP/field_71139_cq
# EntityAITaskEntry
public nk #CL:EntityAITaskEntry
# EntityAITasks
public nj.a #FD:EntityAITasks/field_75782_a #taskList
# BlockChest
public ajy.m(Lyn;III)Z #MD:BlockChest/func_72292_n #isOcelotBlockingChest
# EntityLiving
public mj.aT #FD:EntityLiving/field_70736_aM #carryoverDamage
public mj.bn #FD:EntityLiving/field_70714_bg #tasks
public mj.bG #FD:EntityLiving/field_70703_bu #isJumping
# EntityAIOcelotSit
protected nw.a(Lyn;III)Z #MD:EntityAIOcelotSit/func_75398_a #nearestSittableBlock
protected nw.f()Z #MD:EntityAIOcelotSit/func_75399_f #isblocksittable
# CallableMinecraftVersion - sanity check the MC version
public b #CL:CallableMinecraftVersion
public b.<init>(La;)V #MD:CallableMinecraftVersion/<init>(Lnet/minecraft/src/CrashReport;) #constructor
# EntityAnimal
public pd.d #FD:EntityAnimal/field_70881_d #inLove
# WorldType
public yx.<init>(ILjava/lang/String;)V #MD:WorldType/<init>(ILjava/lang/String;)
public yx.<init>(ILjava/lang/String;I)V #MD:WorldType/<init>(ILjava/lang/String;I)
# ComponentVillage
public agc #CL:ComponentVillage
# EntityVillager - minmax lists
public re.a(Lyf;ILjava/util/Random;F)V #MD:EntityVillager/func_70948_a #addBuy
public re.b(Lyf;ILjava/util/Random;F)V #MD:EntityVillager/func_70949_b #addSell
public re.bP #FD:EntityVillager/field_70958_bB
public re.bQ #FD:EntityVillager/field_70960_bC
# GuiButtonMerchant
public axd #CL:GuiButtonMerchant
protected aug.a #FD:GuiYesNo/field_73942_a #guiScreen
+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
+2136 -1870
View File
File diff suppressed because it is too large. Load diff
+7942 -2270
View File
File diff suppressed because it is too large. Load diff
+18752 -16889
View File
File diff suppressed because it is too large. Load diff
+27 -19
View File
@@ -22,22 +22,24 @@ Params = %(DirConf)s/params.csv
NewIds = %(DirConf)s/newids.csv
[SRGS]
ConfClient = %(DirConf)s/packaged.srg
ConfServer = %(DirConf)s/packaged.srg
Client = %(DirTemp)s/client_rg.srg
Server = %(DirTemp)s/server_rg.srg
DeobfClient = %(DirTemp)s/client_deobf.srg
DeobfServer = %(DirTemp)s/server_deobf.srg
ReobfClient = %(DirTemp)s/client_ro.srg
ReobfServer = %(DirTemp)s/server_ro.srg
ConfClient = %(DirConf)s/packaged.srg
ConfServer = %(DirConf)s/packaged.srg
Client = %(DirTemp)s/client_rg.srg
Server = %(DirTemp)s/server_rg.srg
DeobfClient = %(DirTemp)s/client_deobf.srg
DeobfServer = %(DirTemp)s/server_deobf.srg
ReobfClient = %(DirTemp)s/client_ro.srg
ReobfServer = %(DirTemp)s/server_ro.srg
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 = 8e80fb01b321c6b3c7efca397a3eea35
MD5Server = f69ac4bfce2dfbce03fe872518f75a05
MD5Client = 2e5044f5359e82245551167a237f3167
MD5Server = ba3145656b1480122bd8759cecd7b7a1
[RETROGUARD]
Location = %(DirRuntime)s/bin/retroguard.jar
@@ -69,13 +71,15 @@ 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
BinServerTemp = %(DirTempBin)s/minecraft_server
SrcClient = %(DirSrc)s/minecraft
SrcServer = %(DirSrc)s/minecraft_server
TestClient = net/minecraft/client/Minecraft
TestClient = net/minecraft/client/main/Main
TestServer = net/minecraft/server/MinecraftServer
[PATCHES]
@@ -92,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 =
ClassPathServer =
ClientFixes = %(DirConf)s/patches
FixStart = Start
IgnorePkg = paulscode,com/jcraft,isom,ibxm,de/matthiasmann/twl,org/xmlpull,javax/xml,org/bouncycastle,argo
IgnorePkg = paulscode,com,isom,ibxm,de/matthiasmann/twl,org,javax/xml,javax/ws,argo
[REOBF]
MD5Client = %(DirTemp)s/client.md5
@@ -123,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 = 92000
ParamIndex = 8000
RGIndex = 143000
ParamIndex = 43000
[ASTYLE]
AstyleConfig = %(DirConf)s/astyle.cfg
@@ -142,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}
CmdStartSrv = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" net.minecraft.server.MinecraftServer
CmdStartClt = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" -Djava.library.path={natives} Start
CmdRecompScala = %s -encoding UTF-8 -deprecation -target:jvm-1.6 -classpath "{classpath}" -sourcepath {sourcepath} -d {outpath} {pkgs}
CmdStartSrv = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" cpw.mods.fml.relauncher.ServerLaunchWrapper {extraargs}
CmdStartClt = %s -Xincgc -Xms1024M -Xmx1024M -cp "{classpath}" -Djava.library.path={natives} net.minecraft.launchwrapper.Launch --tweakClass cpw.mods.fml.common.launcher.FMLTweaker --version FML_DEV {extraargs}
+1971 -1442
View File
File diff suppressed because it is too large. Load diff
-8820
View File
File diff suppressed because it is too large. Load diff
+305 -116
View File
@@ -1,64 +1,30 @@
class,package
IconRegister,net/minecraft/client/renderer/texture
Rect2i,net/minecraft/client/renderer/texture
RenderTntMinecart,net/minecraft/client/renderer/entity
ScreenHopper,net/minecraft/client/gui
StitchHolder,net/minecraft/client/renderer/texture
StitchSlot,net/minecraft/client/renderer/texture
Stitcher,net/minecraft/client/renderer/texture
Texture,net/minecraft/client/renderer/texture
TextureClock,net/minecraft/client/renderer/texture
TextureCompass,net/minecraft/client/renderer/texture
TextureManager,net/minecraft/client/renderer/texture
TextureMap,net/minecraft/client/renderer/texture
TextureStitched,net/minecraft/client/renderer/texture
BlockBasePressurePlate,net/minecraft/block
BlockBaseRail,net/minecraft/block
BlockBaseRailLogic,net/minecraft/block
BlockComparator,net/minecraft/block
BlockDaylightDetector,net/minecraft/block
BlockHopper,net/minecraft/block
BlockPoweredMetal,net/minecraft/block
BlockPoweredRail,net/minecraft/block
BlockQuartz,net/minecraft/block
BlockRepeater,net/minecraft/block
BlockStoneButton,net/minecraft/block
BlockWeightedPressurePlate,net/minecraft/block
BlockWoodButton,net/minecraft/block
CallableTileEntityData,net/minecraft/tileentity
CallableTileEntityID,net/minecraft/tileentity
CombatEntry,net/minecraft/util
CombatTracker,net/minecraft/util
ContainerWorldly,net/minecraft/inventory
EntitySelectorAlive,net/minecraft/command
EntitySelectorHopperInventory,net/minecraft/tileentity
Icon,net/minecraft/util
ItemChestMinecart,net/minecraft/entity
ItemFurnaceMinecart,net/minecraft/entity
ItemRideableMinecart,net/minecraft/entity
ItemTntMinecart,net/minecraft/entity
MenuHopper,net/minecraft/inventory
TileEntityDaylightDetector,net/minecraft/tileentity
TileEntityHopper,net/minecraft/tileentity
Block,net/minecraft/block
BlockAnvil,net/minecraft/block
BlockBasePressurePlate,net/minecraft/block
BlockBaseRailLogic,net/minecraft/block
BlockBeacon,net/minecraft/block
BlockBed,net/minecraft/block
BlockBookshelf,net/minecraft/block
BlockBreakable,net/minecraft/block
BlockBrewingStand,net/minecraft/block
BlockButton,net/minecraft/block
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
BlockCrops,net/minecraft/block
BlockDaylightDetector,net/minecraft/block
BlockDeadBush,net/minecraft/block
BlockDetectorRail,net/minecraft/block
BlockDirectional,net/minecraft/block
@@ -66,6 +32,7 @@ BlockDirt,net/minecraft/block
BlockDispenser,net/minecraft/block
BlockDoor,net/minecraft/block
BlockDragonEgg,net/minecraft/block
BlockDropper,net/minecraft/block
BlockEnchantmentTable,net/minecraft/block
BlockEndPortal,net/minecraft/block
BlockEndPortalFrame,net/minecraft/block
@@ -85,6 +52,8 @@ 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
BlockLadder,net/minecraft/block
@@ -111,15 +80,22 @@ BlockPistonExtension,net/minecraft/block
BlockPistonMoving,net/minecraft/block
BlockPortal,net/minecraft/block
BlockPotato,net/minecraft/block
BlockPoweredOre,net/minecraft/block
BlockPressurePlate,net/minecraft/block
BlockPressurePlateWeighted,net/minecraft/block
BlockPumpkin,net/minecraft/block
BlockQuartz,net/minecraft/block
BlockRail,net/minecraft/block
BlockRailBase,net/minecraft/block
BlockRailPowered,net/minecraft/block
BlockRedstoneLight,net/minecraft/block
BlockRedstoneLogic,net/minecraft/block
BlockRedstoneOre,net/minecraft/block
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
@@ -150,13 +126,12 @@ BlockWood,net/minecraft/block
BlockWoodSlab,net/minecraft/block
BlockWorkbench,net/minecraft/block
EnumMobType,net/minecraft/block
RailLogic,net/minecraft/block
ITileEntityProvider,net/minecraft/block
RedstoneUpdateInfo,net/minecraft/block
StepSound,net/minecraft/block
StepSoundAnvil,net/minecraft/block
StepSoundSand,net/minecraft/block
StepSoundStone,net/minecraft/block
TileEntityRecordPlayer,net/minecraft/block
MapColor,net/minecraft/block/material
Material,net/minecraft/block/material
MaterialLiquid,net/minecraft/block/material
@@ -164,32 +139,29 @@ MaterialLogic,net/minecraft/block/material
MaterialPortal,net/minecraft/block/material
MaterialTransparent,net/minecraft/block/material
MaterialWeb,net/minecraft/block/material
AnvilConverterException,net/minecraft/client
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
MinecraftINNER13,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
@@ -199,10 +171,10 @@ FontRenderer,net/minecraft/client/gui
Gui,net/minecraft/client/gui
GuiButton,net/minecraft/client/gui
GuiButtonLanguage,net/minecraft/client/gui
GuiButtonLink,net/minecraft/client/gui
GuiButtonMerchant,net/minecraft/client/gui
GuiButtonNextPage,net/minecraft/client/gui
GuiChat,net/minecraft/client/gui
GuiChatConfirmLink,net/minecraft/client/gui
GuiCommandBlock,net/minecraft/client/gui
GuiConfirmOpenLink,net/minecraft/client/gui
GuiControls,net/minecraft/client/gui
@@ -217,6 +189,7 @@ GuiFlatPresets,net/minecraft/client/gui
GuiFlatPresetsItem,net/minecraft/client/gui
GuiFlatPresetsListSlot,net/minecraft/client/gui
GuiGameOver,net/minecraft/client/gui
GuiHopper,net/minecraft/client/gui
GuiIngame,net/minecraft/client/gui
GuiIngameMenu,net/minecraft/client/gui
GuiLanguage,net/minecraft/client/gui
@@ -226,22 +199,31 @@ 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
GuiScreenAddServer,net/minecraft/client/gui
GuiScreenBook,net/minecraft/client/gui
GuiScreenConfigureWorld,net/minecraft/client/gui
GuiScreenConfirmation,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
GuiScreenOnlineServersSubscreen,net/minecraft/client/gui
GuiScreenSelectLocation,net/minecraft/client/gui
GuiScreenServerList,net/minecraft/client/gui
GuiScreenSubscription,net/minecraft/client/gui
GuiSelectWorld,net/minecraft/client/gui
GuiShareToLan,net/minecraft/client/gui
GuiSleepMP,net/minecraft/client/gui
GuiSlider,net/minecraft/client/gui
GuiSlot,net/minecraft/client/gui
GuiSlotLanguage,net/minecraft/client/gui
GuiSlotOnlineServerList,net/minecraft/client/gui
GuiSlotServer,net/minecraft/client/gui
GuiSmallButton,net/minecraft/client/gui
GuiSnooper,net/minecraft/client/gui
@@ -253,9 +235,16 @@ 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
TaskLongRunning,net/minecraft/client/gui
TaskOnlineConnect,net/minecraft/client/gui
ThreadConnectToOnlineServer,net/minecraft/client/gui
ThreadOnlineConnect,net/minecraft/client/gui
ThreadOnlineScreen,net/minecraft/client/gui
ThreadPollServers,net/minecraft/client/gui
GuiAchievement,net/minecraft/client/gui/achievement
GuiAchievements,net/minecraft/client/gui/achievement
@@ -282,7 +271,52 @@ 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
GuiScreenClientOutdated,net/minecraft/client/mco
GuiScreenConfirmationType,net/minecraft/client/mco
McoClient,net/minecraft/client/mco
McoServer,net/minecraft/client/mco
McoServerAddress,net/minecraft/client/mco
McoServerList,net/minecraft/client/mco
McoServerListEmptyAnon,net/minecraft/client/mco
McoServerListUpdateTask,net/minecraft/client/mco
McoServerListUpdateTaskComparator,net/minecraft/client/mco
PendingInvite,net/minecraft/client/mco
PendingInvitesList,net/minecraft/client/mco
Request,net/minecraft/client/mco
RequestDelete,net/minecraft/client/mco
RequestGet,net/minecraft/client/mco
RequestPost,net/minecraft/client/mco
RequestPut,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
@@ -298,8 +332,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
@@ -332,7 +368,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
@@ -341,7 +376,8 @@ ThreadConnectToServer,net/minecraft/client/multiplayer
ThreadLanServerFind,net/minecraft/client/multiplayer
ThreadLanServerPing,net/minecraft/client/multiplayer
WorldClient,net/minecraft/client/multiplayer
CallableLastTickedParticle,net/minecraft/client/particle
WorldClientINNER3,net/minecraft/client/multiplayer
WorldClientINNER4,net/minecraft/client/multiplayer
EffectRenderer,net/minecraft/client/particle
EntityAuraFX,net/minecraft/client/particle
EntityBreakingFX,net/minecraft/client/particle
@@ -376,7 +412,6 @@ EntitySuspendFX,net/minecraft/client/particle
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
@@ -385,20 +420,21 @@ EntityRenderer,net/minecraft/client/renderer
EntitySorter,net/minecraft/client/renderer
GLAllocation,net/minecraft/client/renderer
IImageBuffer,net/minecraft/client/renderer
IconFlipped,net/minecraft/client/renderer
ImageBufferDownload,net/minecraft/client/renderer
InventoryEffectRenderer,net/minecraft/client/renderer
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
@@ -410,6 +446,7 @@ RenderBat,net/minecraft/client/renderer/entity
RenderBiped,net/minecraft/client/renderer/entity
RenderBlaze,net/minecraft/client/renderer/entity
RenderBoat,net/minecraft/client/renderer/entity
RenderCaveSpider,net/minecraft/client/renderer/entity
RenderChicken,net/minecraft/client/renderer/entity
RenderCow,net/minecraft/client/renderer/entity
RenderCreeper,net/minecraft/client/renderer/entity
@@ -422,13 +459,16 @@ RenderFireball,net/minecraft/client/renderer/entity
RenderFish,net/minecraft/client/renderer/entity
RenderGhast,net/minecraft/client/renderer/entity
RenderGiantZombie,net/minecraft/client/renderer/entity
RenderHorse,net/minecraft/client/renderer/entity
RenderIronGolem,net/minecraft/client/renderer/entity
RenderItem,net/minecraft/client/renderer/entity
RenderLeashKnot,net/minecraft/client/renderer/entity
RenderLightningBolt,net/minecraft/client/renderer/entity
RenderLiving,net/minecraft/client/renderer/entity
RenderMagmaCube,net/minecraft/client/renderer/entity
RenderManager,net/minecraft/client/renderer/entity
RenderMinecart,net/minecraft/client/renderer/entity
RenderMinecartMobSpawner,net/minecraft/client/renderer/entity
RenderMooshroom,net/minecraft/client/renderer/entity
RenderOcelot,net/minecraft/client/renderer/entity
RenderPainting,net/minecraft/client/renderer/entity
@@ -443,21 +483,32 @@ RenderSnowball,net/minecraft/client/renderer/entity
RenderSpider,net/minecraft/client/renderer/entity
RenderSquid,net/minecraft/client/renderer/entity
RenderTNTPrimed,net/minecraft/client/renderer/entity
RenderTntMinecart,net/minecraft/client/renderer/entity
RenderVillager,net/minecraft/client/renderer/entity
RenderWitch,net/minecraft/client/renderer/entity
RenderWither,net/minecraft/client/renderer/entity
RenderWolf,net/minecraft/client/renderer/entity
RenderXPOrb,net/minecraft/client/renderer/entity
RenderZombie,net/minecraft/client/renderer/entity
TextureCompassFX,net/minecraft/client/renderer/texturefx
TextureFX,net/minecraft/client/renderer/texturefx
TextureFlamesFX,net/minecraft/client/renderer/texturefx
TextureLavaFX,net/minecraft/client/renderer/texturefx
TextureLavaFlowFX,net/minecraft/client/renderer/texturefx
TexturePortalFX,net/minecraft/client/renderer/texturefx
TextureWatchFX,net/minecraft/client/renderer/texturefx
TextureWaterFX,net/minecraft/client/renderer/texturefx
TextureWaterFlowFX,net/minecraft/client/renderer/texturefx
RendererLivingEntity,net/minecraft/client/renderer/entity
AbstractTexture,net/minecraft/client/renderer/texture
DynamicTexture,net/minecraft/client/renderer/texture
IconRegister,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
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
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
@@ -471,24 +522,59 @@ 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
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
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
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
StatPlaceholder,net/minecraft/client/stats
CommandBase,net/minecraft/command
CommandClearInventory,net/minecraft/command
CommandDebug,net/minecraft/command
CommandDefaultGameMode,net/minecraft/command
CommandDifficulty,net/minecraft/command
CommandEffect,net/minecraft/command
CommandEnchant,net/minecraft/command
CommandException,net/minecraft/command
CommandGameMode,net/minecraft/command
@@ -498,6 +584,7 @@ CommandHandler,net/minecraft/command
CommandHelp,net/minecraft/command
CommandKill,net/minecraft/command
CommandNotFoundException,net/minecraft/command
CommandPlaySound,net/minecraft/command
CommandServerBan,net/minecraft/command
CommandServerBanIp,net/minecraft/command
CommandServerBanlist,net/minecraft/command
@@ -517,12 +604,17 @@ CommandServerSay,net/minecraft/command
CommandServerStop,net/minecraft/command
CommandServerTp,net/minecraft/command
CommandServerWhitelist,net/minecraft/command
CommandSetPlayerTimeout,net/minecraft/command
CommandSetSpawnpoint,net/minecraft/command
CommandShowSeed,net/minecraft/command
CommandSpreadPlayers,net/minecraft/command
CommandSpreadPlayersPosition,net/minecraft/command
CommandTime,net/minecraft/command
CommandToggleDownfall,net/minecraft/command
CommandWeather,net/minecraft/command
CommandXP,net/minecraft/command
EntitySelectorAlive,net/minecraft/command
EntitySelectorInventory,net/minecraft/command
IAdminCommand,net/minecraft/command
ICommand,net/minecraft/command
ICommandManager,net/minecraft/command
@@ -564,22 +656,25 @@ CreativeTabSearch,net/minecraft/creativetab
CreativeTabTools,net/minecraft/creativetab
CreativeTabTransport,net/minecraft/creativetab
CreativeTabs,net/minecraft/creativetab
BehaviorArrowDispense,net/minecraft/dispenser
BehaviorBucketEmptyDispense,net/minecraft/dispenser
BehaviorBucketFullDispense,net/minecraft/dispenser
BehaviorDefaultDispenseItem,net/minecraft/dispenser
BehaviorDispenseBoat,net/minecraft/dispenser
BehaviorDispenseFireball,net/minecraft/dispenser
BehaviorDispenseFirework,net/minecraft/dispenser
BehaviorDispenseItemProvider,net/minecraft/dispenser
BehaviorDispenseMinecart,net/minecraft/dispenser
BehaviorEggDispense,net/minecraft/dispenser
BehaviorExpBottleDispense,net/minecraft/dispenser
BehaviorMobEggDispense,net/minecraft/dispenser
BehaviorPotionDispense,net/minecraft/dispenser
BehaviorPotionDispenseLogic,net/minecraft/dispenser
BehaviorProjectileDispense,net/minecraft/dispenser
BehaviorSnowballDispense,net/minecraft/dispenser
DispenserBehaviorArrow,net/minecraft/dispenser
DispenserBehaviorBoat,net/minecraft/dispenser
DispenserBehaviorDye,net/minecraft/dispenser
DispenserBehaviorEgg,net/minecraft/dispenser
DispenserBehaviorEmptyBucket,net/minecraft/dispenser
DispenserBehaviorExperience,net/minecraft/dispenser
DispenserBehaviorFilledBucket,net/minecraft/dispenser
DispenserBehaviorFire,net/minecraft/dispenser
DispenserBehaviorFireball,net/minecraft/dispenser
DispenserBehaviorFireworks,net/minecraft/dispenser
DispenserBehaviorMobEgg,net/minecraft/dispenser
DispenserBehaviorPotion,net/minecraft/dispenser
DispenserBehaviorPotionProjectile,net/minecraft/dispenser
DispenserBehaviorSnowball,net/minecraft/dispenser
DispenserBehaviorTNT,net/minecraft/dispenser
DispenserBehaviors,net/minecraft/dispenser
IBehaviorDispenseItem,net/minecraft/dispenser
IBlockSource,net/minecraft/dispenser
ILocatableSource,net/minecraft/dispenser
@@ -612,6 +707,8 @@ EnchantmentUntouching,net/minecraft/enchantment
EnchantmentWaterWorker,net/minecraft/enchantment
EnumEnchantmentType,net/minecraft/enchantment
IEnchantmentModifier,net/minecraft/enchantment
CallableEntityName,net/minecraft/entity
CallableEntityTracker,net/minecraft/entity
CallableEntityType,net/minecraft/entity
DataWatcher,net/minecraft/entity
Entity,net/minecraft/entity
@@ -621,8 +718,13 @@ 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
EnumCreatureAttribute,net/minecraft/entity
@@ -635,10 +737,13 @@ 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
EntityAIAvoidEntity,net/minecraft/entity/ai
EntityAIAvoidEntitySelector,net/minecraft/entity/ai
EntityAIBase,net/minecraft/entity/ai
EntityAIBeg,net/minecraft/entity/ai
EntityAIBreakDoor,net/minecraft/entity/ai
@@ -659,9 +764,10 @@ EntityAILookIdle,net/minecraft/entity/ai
EntityAIMate,net/minecraft/entity/ai
EntityAIMoveIndoors,net/minecraft/entity/ai
EntityAIMoveThroughVillage,net/minecraft/entity/ai
EntityAIMoveTowardsRestriction,net/minecraft/entity/ai
EntityAIMoveTowardsTarget,net/minecraft/entity/ai
EntityAIMoveTwardsRestriction,net/minecraft/entity/ai
EntityAINearestAttackableTarget,net/minecraft/entity/ai
EntityAINearestAttackableTargetSelector,net/minecraft/entity/ai
EntityAINearestAttackableTargetSorter,net/minecraft/entity/ai
EntityAIOcelotAttack,net/minecraft/entity/ai
EntityAIOcelotSit,net/minecraft/entity/ai
@@ -672,6 +778,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
@@ -686,9 +793,19 @@ EntityAIWatchClosest,net/minecraft/entity/ai
EntityAIWatchClosest2,net/minecraft/entity/ai
EntityJumpHelper,net/minecraft/entity/ai
EntityLookHelper,net/minecraft/entity/ai
EntityMinecartMobSpawner,net/minecraft/entity/ai
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
ModifiableAttributeInstance,net/minecraft/entity/ai/attributes
RangedAttribute,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
@@ -707,6 +824,12 @@ EntityFireworkRocket,net/minecraft/entity/item
EntityItem,net/minecraft/entity/item
EntityItemFrame,net/minecraft/entity/item
EntityMinecart,net/minecraft/entity/item
EntityMinecartChest,net/minecraft/entity/item
EntityMinecartContainer,net/minecraft/entity/item
EntityMinecartEmpty,net/minecraft/entity/item
EntityMinecartFurnace,net/minecraft/entity/item
EntityMinecartHopper,net/minecraft/entity/item
EntityMinecartTNT,net/minecraft/entity/item
EntityPainting,net/minecraft/entity/item
EntityTNTPrimed,net/minecraft/entity/item
EntityXPOrb,net/minecraft/entity/item
@@ -729,6 +852,8 @@ EntitySnowman,net/minecraft/entity/monster
EntitySpider,net/minecraft/entity/monster
EntityWitch,net/minecraft/entity/monster
EntityZombie,net/minecraft/entity/monster
EntityZombieGroupData,net/minecraft/entity/monster
EntityZombieINNER1,net/minecraft/entity/monster
FilterIMob,net/minecraft/entity/monster
IMob,net/minecraft/entity/monster
ContainerSheep,net/minecraft/entity/passive
@@ -737,6 +862,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
@@ -747,6 +875,7 @@ EntityVillager,net/minecraft/entity/passive
EntityWaterMob,net/minecraft/entity/passive
EntityWolf,net/minecraft/entity/passive
IAnimals,net/minecraft/entity/passive
CallableItemName,net/minecraft/entity/player
EntityPlayer,net/minecraft/entity/player
EntityPlayerMP,net/minecraft/entity/player
EnumStatus,net/minecraft/entity/player
@@ -762,6 +891,7 @@ EntitySmallFireball,net/minecraft/entity/projectile
EntitySnowball,net/minecraft/entity/projectile
EntityThrowable,net/minecraft/entity/projectile
EntityWitherSkull,net/minecraft/entity/projectile
AnimalChest,net/minecraft/inventory
Container,net/minecraft/inventory
ContainerBeacon,net/minecraft/inventory
ContainerBrewingStand,net/minecraft/inventory
@@ -769,20 +899,26 @@ ContainerChest,net/minecraft/inventory
ContainerDispenser,net/minecraft/inventory
ContainerEnchantment,net/minecraft/inventory
ContainerFurnace,net/minecraft/inventory
ContainerHopper,net/minecraft/inventory
ContainerHorseInventory,net/minecraft/inventory
ContainerHorseInventorySlotArmor,net/minecraft/inventory
ContainerHorseInventorySlotSaddle,net/minecraft/inventory
ContainerMerchant,net/minecraft/inventory
ContainerPlayer,net/minecraft/inventory
ContainerRepair,net/minecraft/inventory
ContainerRepairINNER1,net/minecraft/inventory
ContainerRepairINNER2,net/minecraft/inventory
ContainerWorkbench,net/minecraft/inventory
ICrafting,net/minecraft/inventory
IInvBasic,net/minecraft/inventory
IInventory,net/minecraft/inventory
ISidedInventory,net/minecraft/inventory
InventoryBasic,net/minecraft/inventory
InventoryCraftResult,net/minecraft/inventory
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
@@ -793,7 +929,8 @@ SlotEnchantment,net/minecraft/inventory
SlotEnchantmentTable,net/minecraft/inventory
SlotFurnace,net/minecraft/inventory
SlotMerchantResult,net/minecraft/inventory
SlotRepair,net/minecraft/inventory
BehaviorDispenseArmor,net/minecraft/item
BehaviorDispenseMinecart,net/minecraft/item
EnumAction,net/minecraft/item
EnumArmorMaterial,net/minecraft/item
EnumRarity,net/minecraft/item
@@ -805,6 +942,7 @@ ItemArmor,net/minecraft/item
ItemAxe,net/minecraft/item
ItemBed,net/minecraft/item
ItemBlock,net/minecraft/item
ItemBlockWithMetadata,net/minecraft/item
ItemBoat,net/minecraft/item
ItemBook,net/minecraft/item
ItemBow,net/minecraft/item
@@ -833,6 +971,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
@@ -840,6 +979,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
@@ -854,6 +994,7 @@ ItemSign,net/minecraft/item
ItemSimpleFoiled,net/minecraft/item
ItemSkull,net/minecraft/item
ItemSlab,net/minecraft/item
ItemSnow,net/minecraft/item
ItemSnowball,net/minecraft/item
ItemSoup,net/minecraft/item
ItemSpade,net/minecraft/item
@@ -878,6 +1019,10 @@ RecipesTools,net/minecraft/item/crafting
RecipesWeapons,net/minecraft/item/crafting
ShapedRecipes,net/minecraft/item/crafting
ShapelessRecipes,net/minecraft/item/crafting
ILogAgent,net/minecraft/logging
LogAgent,net/minecraft/logging
LogAgentEmptyAnon,net/minecraft/logging
LogFormatter,net/minecraft/logging
CallableTagCompound1,net/minecraft/nbt
CallableTagCompound2,net/minecraft/nbt
CompressedStreamTools,net/minecraft/nbt
@@ -894,6 +1039,9 @@ 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
MemoryConnection,net/minecraft/network
NetLoginHandler,net/minecraft/network
@@ -923,6 +1071,7 @@ Packet12PlayerLook,net/minecraft/network/packet
Packet130UpdateSign,net/minecraft/network/packet
Packet131MapData,net/minecraft/network/packet
Packet132TileEntityData,net/minecraft/network/packet
Packet133TileEditorOpen,net/minecraft/network/packet
Packet13PlayerLookMove,net/minecraft/network/packet
Packet14BlockDig,net/minecraft/network/packet
Packet15Place,net/minecraft/network/packet
@@ -937,8 +1086,11 @@ Packet202PlayerAbilities,net/minecraft/network/packet
Packet203AutoComplete,net/minecraft/network/packet
Packet204ClientInfo,net/minecraft/network/packet
Packet205ClientCommand,net/minecraft/network/packet
Packet206SetObjective,net/minecraft/network/packet
Packet207SetScore,net/minecraft/network/packet
Packet208SetDisplayObjective,net/minecraft/network/packet
Packet209SetPlayerTeam,net/minecraft/network/packet
Packet20NamedEntitySpawn,net/minecraft/network/packet
Packet21PickupSpawn,net/minecraft/network/packet
Packet22Collect,net/minecraft/network/packet
Packet23VehicleSpawn,net/minecraft/network/packet
Packet24MobSpawn,net/minecraft/network/packet
@@ -949,6 +1101,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
@@ -965,6 +1118,8 @@ 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
Packet44UpdateAttributesSnapshot,net/minecraft/network/packet
Packet4UpdateTime,net/minecraft/network/packet
Packet51MapChunk,net/minecraft/network/packet
Packet51MapChunkData,net/minecraft/network/packet
@@ -977,6 +1132,7 @@ Packet5PlayerInventory,net/minecraft/network/packet
Packet60Explosion,net/minecraft/network/packet
Packet61DoorChange,net/minecraft/network/packet
Packet62LevelSound,net/minecraft/network/packet
Packet63WorldParticles,net/minecraft/network/packet
Packet6SpawnPosition,net/minecraft/network/packet
Packet70GameEvent,net/minecraft/network/packet
Packet71Weather,net/minecraft/network/packet
@@ -999,14 +1155,30 @@ 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
PlayerUsageSnooperThread,net/minecraft/profiler
Profiler,net/minecraft/profiler
ProfilerResult,net/minecraft/profiler
Score,net/minecraft/scoreboard
ScoreComparator,net/minecraft/scoreboard
ScoreDummyCriteria,net/minecraft/scoreboard
ScoreHealthCriteria,net/minecraft/scoreboard
ScoreObjective,net/minecraft/scoreboard
ScoreObjectiveCriteria,net/minecraft/scoreboard
ScorePlayerTeam,net/minecraft/scoreboard
Scoreboard,net/minecraft/scoreboard
ScoreboardSaveData,net/minecraft/scoreboard
ServerCommandScoreboard,net/minecraft/scoreboard
ServerCommandTestFor,net/minecraft/scoreboard
ServerScoreboard,net/minecraft/scoreboard
Team,net/minecraft/scoreboard
CallableIsServerModded,net/minecraft/server
CallableServerMemoryStats,net/minecraft/server
CallableServerProfiler,net/minecraft/server
@@ -1016,24 +1188,22 @@ ThreadDedicatedServer,net/minecraft/server
ThreadMinecraftServer,net/minecraft/server
CallableServerType,net/minecraft/server/dedicated
CallableType,net/minecraft/server/dedicated
ConsoleLogFormatter,net/minecraft/server/dedicated
ConsoleLogManager,net/minecraft/server/dedicated
DedicatedPlayerList,net/minecraft/server/dedicated
DedicatedServer,net/minecraft/server/dedicated
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
@@ -1057,33 +1227,47 @@ 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
ThreadStatSyncherReceive,net/minecraft/stats
ThreadStatSyncherSend,net/minecraft/stats
CallableTileEntityData,net/minecraft/tileentity
CallableTileEntityID,net/minecraft/tileentity
CallableTileEntityName,net/minecraft/tileentity
Hopper,net/minecraft/tileentity
MobSpawnerBaseLogic,net/minecraft/tileentity
TileEntity,net/minecraft/tileentity
TileEntityBeacon,net/minecraft/tileentity
TileEntityBrewingStand,net/minecraft/tileentity
TileEntityChest,net/minecraft/tileentity
TileEntityCommandBlock,net/minecraft/tileentity
TileEntityComparator,net/minecraft/tileentity
TileEntityDaylightDetector,net/minecraft/tileentity
TileEntityDispenser,net/minecraft/tileentity
TileEntityDropper,net/minecraft/tileentity
TileEntityEnchantmentTable,net/minecraft/tileentity
TileEntityEndPortal,net/minecraft/tileentity
TileEntityEnderChest,net/minecraft/tileentity
TileEntityFurnace,net/minecraft/tileentity
TileEntityHopper,net/minecraft/tileentity
TileEntityMobSpawner,net/minecraft/tileentity
TileEntityMobSpawnerSpawnData,net/minecraft/tileentity
TileEntityMobSpawnerLogic,net/minecraft/tileentity
TileEntityNote,net/minecraft/tileentity
TileEntityPiston,net/minecraft/tileentity
TileEntityRecordPlayer,net/minecraft/tileentity
TileEntitySign,net/minecraft/tileentity
TileEntitySkull,net/minecraft/tileentity
WeightedRandomMinecart,net/minecraft/tileentity
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
CryptManager,net/minecraft/util
DamageSource,net/minecraft/util
Direction,net/minecraft/util
@@ -1091,21 +1275,22 @@ EnchantmentNameParts,net/minecraft/util
EntityDamageSource,net/minecraft/util
EntityDamageSourceIndirect,net/minecraft/util
EnumArt,net/minecraft/util
EnumChatFormatting,net/minecraft/util
EnumFacing,net/minecraft/util
EnumMovingObjectType,net/minecraft/util
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
IntHashMapEntry,net/minecraft/util
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
@@ -1113,14 +1298,16 @@ MovementInput,net/minecraft/util
MovementInputFromOptions,net/minecraft/util
MovingObjectPosition,net/minecraft/util
ReportedException,net/minecraft/util
ResourceLocation,net/minecraft/util
ScreenShotHelper,net/minecraft/util
Session,net/minecraft/util
StatCollector,net/minecraft/util
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
WeightedRandom,net/minecraft/util
@@ -1141,7 +1328,6 @@ ChunkCoordIntPair,net/minecraft/world
ChunkPosition,net/minecraft/world
ColorizerFoliage,net/minecraft/world
ColorizerGrass,net/minecraft/world
ColorizerWater,net/minecraft/world
EnumGameType,net/minecraft/world
EnumSkyBlock,net/minecraft/world
Explosion,net/minecraft/world
@@ -1297,6 +1483,7 @@ ComponentNetherBridgeThrone,net/minecraft/world/gen/structure
ComponentScatteredFeature,net/minecraft/world/gen/structure
ComponentScatteredFeatureDesertPyramid,net/minecraft/world/gen/structure
ComponentScatteredFeatureJunglePyramid,net/minecraft/world/gen/structure
ComponentScatteredFeaturePieces,net/minecraft/world/gen/structure
ComponentScatteredFeaturePieces2,net/minecraft/world/gen/structure
ComponentScatteredFeatureSwampHut,net/minecraft/world/gen/structure
ComponentStronghold,net/minecraft/world/gen/structure
@@ -1334,6 +1521,8 @@ MapGenMineshaft,net/minecraft/world/gen/structure
MapGenNetherBridge,net/minecraft/world/gen/structure
MapGenStronghold,net/minecraft/world/gen/structure
MapGenStructure,net/minecraft/world/gen/structure
MapGenStructureData,net/minecraft/world/gen/structure
MapGenStructureIO,net/minecraft/world/gen/structure
MapGenVillage,net/minecraft/world/gen/structure
StructureBoundingBox,net/minecraft/world/gen/structure
StructureComponent,net/minecraft/world/gen/structure
1 class package
IconRegister net/minecraft/client/renderer/texture
Rect2i net/minecraft/client/renderer/texture
RenderTntMinecart net/minecraft/client/renderer/entity
ScreenHopper net/minecraft/client/gui
StitchHolder net/minecraft/client/renderer/texture
StitchSlot net/minecraft/client/renderer/texture
Stitcher net/minecraft/client/renderer/texture
Texture net/minecraft/client/renderer/texture
TextureClock net/minecraft/client/renderer/texture
TextureCompass net/minecraft/client/renderer/texture
TextureManager net/minecraft/client/renderer/texture
TextureMap net/minecraft/client/renderer/texture
TextureStitched net/minecraft/client/renderer/texture
BlockBasePressurePlate net/minecraft/block
BlockBaseRail net/minecraft/block
BlockBaseRailLogic net/minecraft/block
BlockComparator net/minecraft/block
BlockDaylightDetector net/minecraft/block
BlockHopper net/minecraft/block
BlockPoweredMetal net/minecraft/block
BlockPoweredRail net/minecraft/block
BlockQuartz net/minecraft/block
BlockRepeater net/minecraft/block
BlockStoneButton net/minecraft/block
BlockWeightedPressurePlate net/minecraft/block
BlockWoodButton net/minecraft/block
CallableTileEntityData net/minecraft/tileentity
CallableTileEntityID net/minecraft/tileentity
CombatEntry net/minecraft/util
CombatTracker net/minecraft/util
ContainerWorldly net/minecraft/inventory
EntitySelectorAlive net/minecraft/command
EntitySelectorHopperInventory net/minecraft/tileentity
Icon net/minecraft/util
ItemChestMinecart net/minecraft/entity
ItemFurnaceMinecart net/minecraft/entity
ItemRideableMinecart net/minecraft/entity
ItemTntMinecart net/minecraft/entity
MenuHopper net/minecraft/inventory
TileEntityDaylightDetector net/minecraft/tileentity
TileEntityHopper net/minecraft/tileentity
2 Block net/minecraft/block
3 BlockAnvil net/minecraft/block
4 BlockBasePressurePlate net/minecraft/block
5 BlockBaseRailLogic net/minecraft/block
6 BlockBeacon net/minecraft/block
7 BlockBed net/minecraft/block
8 BlockBookshelf net/minecraft/block
9 BlockBreakable net/minecraft/block
10 BlockBrewingStand net/minecraft/block
11 BlockButton net/minecraft/block
12 BlockButtonStone net/minecraft/block
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
26 BlockCrops net/minecraft/block
27 BlockDaylightDetector net/minecraft/block
28 BlockDeadBush net/minecraft/block
29 BlockDetectorRail net/minecraft/block
30 BlockDirectional net/minecraft/block
32 BlockDispenser net/minecraft/block
33 BlockDoor net/minecraft/block
34 BlockDragonEgg net/minecraft/block
35 BlockDropper net/minecraft/block
36 BlockEnchantmentTable net/minecraft/block
37 BlockEndPortal net/minecraft/block
38 BlockEndPortalFrame 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
59 BlockLadder net/minecraft/block
80 BlockPistonMoving net/minecraft/block
81 BlockPortal net/minecraft/block
82 BlockPotato net/minecraft/block
83 BlockPoweredOre net/minecraft/block
84 BlockPressurePlate net/minecraft/block
85 BlockPressurePlateWeighted net/minecraft/block
86 BlockPumpkin net/minecraft/block
87 BlockQuartz net/minecraft/block
88 BlockRail net/minecraft/block
89 BlockRailBase net/minecraft/block
90 BlockRailPowered net/minecraft/block
91 BlockRedstoneLight net/minecraft/block
92 BlockRedstoneLogic net/minecraft/block
93 BlockRedstoneOre net/minecraft/block
94 BlockRedstoneRepeater 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
126 BlockWoodSlab net/minecraft/block
127 BlockWorkbench net/minecraft/block
128 EnumMobType net/minecraft/block
129 RailLogic ITileEntityProvider net/minecraft/block
130 RedstoneUpdateInfo net/minecraft/block
131 StepSound net/minecraft/block
132 StepSoundAnvil net/minecraft/block
133 StepSoundSand net/minecraft/block
134 StepSoundStone net/minecraft/block
TileEntityRecordPlayer net/minecraft/block
135 MapColor net/minecraft/block/material
136 Material net/minecraft/block/material
137 MaterialLiquid net/minecraft/block/material
139 MaterialPortal net/minecraft/block/material
140 MaterialTransparent net/minecraft/block/material
141 MaterialWeb net/minecraft/block/material
142 AnvilConverterException net/minecraft/client
143 CallableClientMemoryStats net/minecraft/client
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
154 CanvasMinecraftApplet MinecraftINNER13 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
155 StatStringFormatKeyInv net/minecraft/client
156 ThreadClientSleep net/minecraft/client
ThreadShutdown net/minecraft/client
CodecMus net/minecraft/client/audio
MusInputStream net/minecraft/client/audio
157 ScheduledSound net/minecraft/client/audio
158 SoundManager net/minecraft/client/audio
159 SoundManagerINNER1 net/minecraft/client/audio
160 SoundPool net/minecraft/client/audio
161 SoundPoolEntry net/minecraft/client/audio
162 SoundPoolProtocolHandler net/minecraft/client/audio
163 SoundPoolURLConnection net/minecraft/client/audio
164 AbstractClientPlayer net/minecraft/client/entity
165 EntityClientPlayerMP net/minecraft/client/entity
166 EntityOtherPlayerMP net/minecraft/client/entity
167 EntityPlayerSP net/minecraft/client/entity
171 Gui net/minecraft/client/gui
172 GuiButton net/minecraft/client/gui
173 GuiButtonLanguage net/minecraft/client/gui
174 GuiButtonLink net/minecraft/client/gui
175 GuiButtonMerchant net/minecraft/client/gui
176 GuiButtonNextPage net/minecraft/client/gui
177 GuiChat net/minecraft/client/gui
GuiChatConfirmLink net/minecraft/client/gui
178 GuiCommandBlock net/minecraft/client/gui
179 GuiConfirmOpenLink net/minecraft/client/gui
180 GuiControls net/minecraft/client/gui
189 GuiFlatPresetsItem net/minecraft/client/gui
190 GuiFlatPresetsListSlot net/minecraft/client/gui
191 GuiGameOver net/minecraft/client/gui
192 GuiHopper net/minecraft/client/gui
193 GuiIngame net/minecraft/client/gui
194 GuiIngameMenu net/minecraft/client/gui
195 GuiLanguage net/minecraft/client/gui
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
206 GuiScreenAddServer net/minecraft/client/gui
207 GuiScreenBook net/minecraft/client/gui
208 GuiScreenConfigureWorld net/minecraft/client/gui
209 GuiScreenConfirmation 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 GuiScreenOnlineServersSubscreen net/minecraft/client/gui
217 GuiScreenSelectLocation net/minecraft/client/gui
218 GuiScreenServerList net/minecraft/client/gui
219 GuiScreenSubscription net/minecraft/client/gui
220 GuiSelectWorld net/minecraft/client/gui
221 GuiShareToLan net/minecraft/client/gui
222 GuiSleepMP net/minecraft/client/gui
223 GuiSlider net/minecraft/client/gui
224 GuiSlot net/minecraft/client/gui
225 GuiSlotLanguage net/minecraft/client/gui
226 GuiSlotOnlineServerList net/minecraft/client/gui
227 GuiSlotServer net/minecraft/client/gui
228 GuiSmallButton net/minecraft/client/gui
229 GuiSnooper 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
243 TaskLongRunning net/minecraft/client/gui
244 TaskOnlineConnect net/minecraft/client/gui
245 ThreadConnectToOnlineServer net/minecraft/client/gui
246 ThreadOnlineConnect net/minecraft/client/gui
247 ThreadOnlineScreen net/minecraft/client/gui
248 ThreadPollServers net/minecraft/client/gui
249 GuiAchievement net/minecraft/client/gui/achievement
250 GuiAchievements 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
300 GuiScreenClientOutdated net/minecraft/client/mco
301 GuiScreenConfirmationType net/minecraft/client/mco
302 McoClient net/minecraft/client/mco
303 McoServer net/minecraft/client/mco
304 McoServerAddress net/minecraft/client/mco
305 McoServerList net/minecraft/client/mco
306 McoServerListEmptyAnon net/minecraft/client/mco
307 McoServerListUpdateTask net/minecraft/client/mco
308 McoServerListUpdateTaskComparator net/minecraft/client/mco
309 PendingInvite net/minecraft/client/mco
310 PendingInvitesList net/minecraft/client/mco
311 Request net/minecraft/client/mco
312 RequestDelete net/minecraft/client/mco
313 RequestGet net/minecraft/client/mco
314 RequestPost net/minecraft/client/mco
315 RequestPut net/minecraft/client/mco
316 ValueObjectList net/minecraft/client/mco
317 ValueObjectSubscription net/minecraft/client/mco
318 WorldTemplate net/minecraft/client/mco
319 WorldTemplateList net/minecraft/client/mco
320 ModelBase net/minecraft/client/model
321 ModelBat net/minecraft/client/model
322 ModelBiped net/minecraft/client/model
332 ModelEnderCrystal net/minecraft/client/model
333 ModelEnderman net/minecraft/client/model
334 ModelGhast net/minecraft/client/model
335 ModelHorse net/minecraft/client/model
336 ModelIronGolem net/minecraft/client/model
337 ModelLargeChest net/minecraft/client/model
338 ModelLeashKnot net/minecraft/client/model
339 ModelMagmaCube net/minecraft/client/model
340 ModelMinecart net/minecraft/client/model
341 ModelOcelot net/minecraft/client/model
368 LanServer net/minecraft/client/multiplayer
369 LanServerList net/minecraft/client/multiplayer
370 NetClientHandler net/minecraft/client/multiplayer
NetClientWebTextures net/minecraft/client/multiplayer
371 PlayerControllerMP net/minecraft/client/multiplayer
372 ServerAddress net/minecraft/client/multiplayer
373 ServerData net/minecraft/client/multiplayer
376 ThreadLanServerFind net/minecraft/client/multiplayer
377 ThreadLanServerPing net/minecraft/client/multiplayer
378 WorldClient net/minecraft/client/multiplayer
379 CallableLastTickedParticle WorldClientINNER3 net/minecraft/client/particle net/minecraft/client/multiplayer
380 WorldClientINNER4 net/minecraft/client/multiplayer
381 EffectRenderer net/minecraft/client/particle
382 EntityAuraFX net/minecraft/client/particle
383 EntityBreakingFX net/minecraft/client/particle
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
420 EntitySorter net/minecraft/client/renderer
421 GLAllocation net/minecraft/client/renderer
422 IImageBuffer net/minecraft/client/renderer
423 IconFlipped net/minecraft/client/renderer
424 ImageBufferDownload net/minecraft/client/renderer
425 InventoryEffectRenderer net/minecraft/client/renderer
426 ItemRenderer 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
446 RenderBiped net/minecraft/client/renderer/entity
447 RenderBlaze net/minecraft/client/renderer/entity
448 RenderBoat net/minecraft/client/renderer/entity
449 RenderCaveSpider net/minecraft/client/renderer/entity
450 RenderChicken net/minecraft/client/renderer/entity
451 RenderCow net/minecraft/client/renderer/entity
452 RenderCreeper net/minecraft/client/renderer/entity
459 RenderFish net/minecraft/client/renderer/entity
460 RenderGhast net/minecraft/client/renderer/entity
461 RenderGiantZombie net/minecraft/client/renderer/entity
462 RenderHorse net/minecraft/client/renderer/entity
463 RenderIronGolem net/minecraft/client/renderer/entity
464 RenderItem net/minecraft/client/renderer/entity
465 RenderLeashKnot net/minecraft/client/renderer/entity
466 RenderLightningBolt net/minecraft/client/renderer/entity
467 RenderLiving net/minecraft/client/renderer/entity
468 RenderMagmaCube net/minecraft/client/renderer/entity
469 RenderManager net/minecraft/client/renderer/entity
470 RenderMinecart net/minecraft/client/renderer/entity
471 RenderMinecartMobSpawner net/minecraft/client/renderer/entity
472 RenderMooshroom net/minecraft/client/renderer/entity
473 RenderOcelot net/minecraft/client/renderer/entity
474 RenderPainting net/minecraft/client/renderer/entity
483 RenderSpider net/minecraft/client/renderer/entity
484 RenderSquid net/minecraft/client/renderer/entity
485 RenderTNTPrimed net/minecraft/client/renderer/entity
486 RenderTntMinecart net/minecraft/client/renderer/entity
487 RenderVillager net/minecraft/client/renderer/entity
488 RenderWitch net/minecraft/client/renderer/entity
489 RenderWither net/minecraft/client/renderer/entity
490 RenderWolf net/minecraft/client/renderer/entity
491 RenderXPOrb net/minecraft/client/renderer/entity
492 RenderZombie net/minecraft/client/renderer/entity
493 TextureCompassFX RendererLivingEntity net/minecraft/client/renderer/texturefx net/minecraft/client/renderer/entity
494 TextureFX AbstractTexture net/minecraft/client/renderer/texturefx net/minecraft/client/renderer/texture
495 TextureFlamesFX DynamicTexture net/minecraft/client/renderer/texturefx net/minecraft/client/renderer/texture
496 TextureLavaFX IconRegister net/minecraft/client/renderer/texturefx net/minecraft/client/renderer/texture
497 TextureLavaFlowFX LayeredTexture net/minecraft/client/renderer/texturefx net/minecraft/client/renderer/texture
498 TexturePortalFX SimpleTexture net/minecraft/client/renderer/texturefx net/minecraft/client/renderer/texture
499 TextureWatchFX StitchHolder net/minecraft/client/renderer/texturefx net/minecraft/client/renderer/texture
500 TextureWaterFX StitchSlot net/minecraft/client/renderer/texturefx net/minecraft/client/renderer/texture
501 TextureWaterFlowFX Stitcher net/minecraft/client/renderer/texturefx net/minecraft/client/renderer/texture
502 TextureAtlasSprite net/minecraft/client/renderer/texture
503 TextureClock net/minecraft/client/renderer/texture
504 TextureCompass net/minecraft/client/renderer/texture
505 TextureManager net/minecraft/client/renderer/texture
506 TextureManagerINNER1 net/minecraft/client/renderer/texture
507 TextureMap net/minecraft/client/renderer/texture
508 TextureObject net/minecraft/client/renderer/texture
509 TextureUtil net/minecraft/client/renderer/texture
510 Tickable net/minecraft/client/renderer/texture
511 TickableTextureObject net/minecraft/client/renderer/texture
512 RenderEndPortal net/minecraft/client/renderer/tileentity
513 RenderEnderCrystal net/minecraft/client/renderer/tileentity
514 RenderItemFrame net/minecraft/client/renderer/tileentity
522 TileEntitySignRenderer net/minecraft/client/renderer/tileentity
523 TileEntitySkullRenderer net/minecraft/client/renderer/tileentity
524 TileEntitySpecialRenderer net/minecraft/client/renderer/tileentity
525 AbstractResourcePack net/minecraft/client/resources
526 DefaultResourcePack net/minecraft/client/resources
527 FallbackResourceManager net/minecraft/client/resources
528 FileResourcePack net/minecraft/client/resources
529 FolderResourcePack net/minecraft/client/resources
530 FoliageColorReloadListener net/minecraft/client/resources
531 GrassColorReloadListener net/minecraft/client/resources
532 GuiScreenTemporaryResourcePackSelect net/minecraft/client/resources
533 GuiScreenTemporaryResourcePackSelectSelectionList net/minecraft/client/resources
534 I18n net/minecraft/client/resources
535 Language net/minecraft/client/resources
536 LanguageManager net/minecraft/client/resources
537 Locale net/minecraft/client/resources
538 ReloadableResourceManager net/minecraft/client/resources
539 Resource net/minecraft/client/resources
540 ResourceManager net/minecraft/client/resources
541 ResourceManagerReloadListener net/minecraft/client/resources
542 ResourcePack net/minecraft/client/resources
543 ResourcePackFileNotFoundException net/minecraft/client/resources
544 ResourcePackRepository net/minecraft/client/resources
545 ResourcePackRepositoryEntry net/minecraft/client/resources
546 ResourcePackRepositoryFilter net/minecraft/client/resources
547 SimpleReloadableResourceManager net/minecraft/client/resources
548 SimpleReloadableResourceManagerINNER1 net/minecraft/client/resources
549 SimpleResource net/minecraft/client/resources
550 AnimationFrame net/minecraft/client/resources/data
551 AnimationMetadataSection net/minecraft/client/resources/data
552 AnimationMetadataSectionSerializer net/minecraft/client/resources/data
553 BaseMetadataSectionSerializer net/minecraft/client/resources/data
554 FontMetadataSection net/minecraft/client/resources/data
555 FontMetadataSectionSerializer net/minecraft/client/resources/data
556 LanguageMetadataSection net/minecraft/client/resources/data
557 LanguageMetadataSectionSerializer net/minecraft/client/resources/data
558 MetadataSection net/minecraft/client/resources/data
559 MetadataSectionSerializer net/minecraft/client/resources/data
560 MetadataSerializer net/minecraft/client/resources/data
561 MetadataSerializerEmptyAnon net/minecraft/client/resources/data
562 MetadataSerializerRegistration net/minecraft/client/resources/data
563 PackMetadataSection net/minecraft/client/resources/data
564 PackMetadataSectionSerializer net/minecraft/client/resources/data
565 TextureMetadataSection net/minecraft/client/resources/data
566 TextureMetadataSectionSerializer net/minecraft/client/resources/data
567 EnumOptions net/minecraft/client/settings
568 EnumOptionsHelper net/minecraft/client/settings
569 GameSettings net/minecraft/client/settings
570 KeyBinding net/minecraft/client/settings
571 GuiTexturePackSlot StatPlaceholder net/minecraft/client/texturepacks net/minecraft/client/stats
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
572 CommandBase net/minecraft/command
573 CommandClearInventory net/minecraft/command
574 CommandDebug net/minecraft/command
575 CommandDefaultGameMode net/minecraft/command
576 CommandDifficulty net/minecraft/command
577 CommandEffect net/minecraft/command
578 CommandEnchant net/minecraft/command
579 CommandException net/minecraft/command
580 CommandGameMode net/minecraft/command
584 CommandHelp net/minecraft/command
585 CommandKill net/minecraft/command
586 CommandNotFoundException net/minecraft/command
587 CommandPlaySound net/minecraft/command
588 CommandServerBan net/minecraft/command
589 CommandServerBanIp net/minecraft/command
590 CommandServerBanlist net/minecraft/command
604 CommandServerStop net/minecraft/command
605 CommandServerTp net/minecraft/command
606 CommandServerWhitelist net/minecraft/command
607 CommandSetPlayerTimeout net/minecraft/command
608 CommandSetSpawnpoint net/minecraft/command
609 CommandShowSeed net/minecraft/command
610 CommandSpreadPlayers net/minecraft/command
611 CommandSpreadPlayersPosition net/minecraft/command
612 CommandTime net/minecraft/command
613 CommandToggleDownfall net/minecraft/command
614 CommandWeather net/minecraft/command
615 CommandXP net/minecraft/command
616 EntitySelectorAlive net/minecraft/command
617 EntitySelectorInventory net/minecraft/command
618 IAdminCommand net/minecraft/command
619 ICommand net/minecraft/command
620 ICommandManager net/minecraft/command
656 CreativeTabTools net/minecraft/creativetab
657 CreativeTabTransport net/minecraft/creativetab
658 CreativeTabs net/minecraft/creativetab
BehaviorArrowDispense net/minecraft/dispenser
BehaviorBucketEmptyDispense net/minecraft/dispenser
BehaviorBucketFullDispense net/minecraft/dispenser
659 BehaviorDefaultDispenseItem net/minecraft/dispenser
BehaviorDispenseBoat net/minecraft/dispenser
BehaviorDispenseFireball net/minecraft/dispenser
BehaviorDispenseFirework net/minecraft/dispenser
660 BehaviorDispenseItemProvider net/minecraft/dispenser
BehaviorDispenseMinecart net/minecraft/dispenser
BehaviorEggDispense net/minecraft/dispenser
BehaviorExpBottleDispense net/minecraft/dispenser
BehaviorMobEggDispense net/minecraft/dispenser
BehaviorPotionDispense net/minecraft/dispenser
BehaviorPotionDispenseLogic net/minecraft/dispenser
661 BehaviorProjectileDispense net/minecraft/dispenser
662 BehaviorSnowballDispense DispenserBehaviorArrow net/minecraft/dispenser
663 DispenserBehaviorBoat net/minecraft/dispenser
664 DispenserBehaviorDye net/minecraft/dispenser
665 DispenserBehaviorEgg net/minecraft/dispenser
666 DispenserBehaviorEmptyBucket net/minecraft/dispenser
667 DispenserBehaviorExperience net/minecraft/dispenser
668 DispenserBehaviorFilledBucket net/minecraft/dispenser
669 DispenserBehaviorFire net/minecraft/dispenser
670 DispenserBehaviorFireball net/minecraft/dispenser
671 DispenserBehaviorFireworks net/minecraft/dispenser
672 DispenserBehaviorMobEgg net/minecraft/dispenser
673 DispenserBehaviorPotion net/minecraft/dispenser
674 DispenserBehaviorPotionProjectile net/minecraft/dispenser
675 DispenserBehaviorSnowball net/minecraft/dispenser
676 DispenserBehaviorTNT net/minecraft/dispenser
677 DispenserBehaviors net/minecraft/dispenser
678 IBehaviorDispenseItem net/minecraft/dispenser
679 IBlockSource net/minecraft/dispenser
680 ILocatableSource net/minecraft/dispenser
707 EnchantmentWaterWorker net/minecraft/enchantment
708 EnumEnchantmentType net/minecraft/enchantment
709 IEnchantmentModifier net/minecraft/enchantment
710 CallableEntityName net/minecraft/entity
711 CallableEntityTracker net/minecraft/entity
712 CallableEntityType net/minecraft/entity
713 DataWatcher net/minecraft/entity
714 Entity net/minecraft/entity
718 EntityEggInfo net/minecraft/entity
719 EntityFlying net/minecraft/entity
720 EntityHanging net/minecraft/entity
721 EntityLeashKnot net/minecraft/entity
722 EntityList net/minecraft/entity
723 EntityLiving net/minecraft/entity
724 EntityLivingBase net/minecraft/entity
725 EntityLivingData net/minecraft/entity
726 EntityOwnable net/minecraft/entity
727 EntitySelectorArmoredMob net/minecraft/entity
728 EntityTracker net/minecraft/entity
729 EntityTrackerEntry net/minecraft/entity
730 EnumCreatureAttribute net/minecraft/entity
737 IProjectile net/minecraft/entity
738 IRangedAttackMob net/minecraft/entity
739 NpcMerchant net/minecraft/entity
740 SharedMonsterAttributes net/minecraft/entity
741 SpiderEffectsGroupData net/minecraft/entity
742 WatchableObject net/minecraft/entity
743 EntityAIArrowAttack net/minecraft/entity/ai
744 EntityAIAttackOnCollide net/minecraft/entity/ai
745 EntityAIAvoidEntity net/minecraft/entity/ai
746 EntityAIAvoidEntitySelector net/minecraft/entity/ai
747 EntityAIBase net/minecraft/entity/ai
748 EntityAIBeg net/minecraft/entity/ai
749 EntityAIBreakDoor net/minecraft/entity/ai
764 EntityAIMate net/minecraft/entity/ai
765 EntityAIMoveIndoors net/minecraft/entity/ai
766 EntityAIMoveThroughVillage net/minecraft/entity/ai
767 EntityAIMoveTowardsRestriction net/minecraft/entity/ai
768 EntityAIMoveTowardsTarget net/minecraft/entity/ai
EntityAIMoveTwardsRestriction net/minecraft/entity/ai
769 EntityAINearestAttackableTarget net/minecraft/entity/ai
770 EntityAINearestAttackableTargetSelector net/minecraft/entity/ai
771 EntityAINearestAttackableTargetSorter net/minecraft/entity/ai
772 EntityAIOcelotAttack net/minecraft/entity/ai
773 EntityAIOcelotSit net/minecraft/entity/ai
778 EntityAIPlay net/minecraft/entity/ai
779 EntityAIRestrictOpenDoor net/minecraft/entity/ai
780 EntityAIRestrictSun net/minecraft/entity/ai
781 EntityAIRunAroundLikeCrazy net/minecraft/entity/ai
782 EntityAISit net/minecraft/entity/ai
783 EntityAISwimming net/minecraft/entity/ai
784 EntityAITarget net/minecraft/entity/ai
793 EntityAIWatchClosest2 net/minecraft/entity/ai
794 EntityJumpHelper net/minecraft/entity/ai
795 EntityLookHelper net/minecraft/entity/ai
796 EntityMinecartMobSpawner net/minecraft/entity/ai
797 EntityMinecartMobSpawnerLogic net/minecraft/entity/ai
798 EntityMoveHelper net/minecraft/entity/ai
799 EntitySenses net/minecraft/entity/ai
800 RandomPositionGenerator net/minecraft/entity/ai
801 Attribute net/minecraft/entity/ai/attributes
802 AttributeInstance net/minecraft/entity/ai/attributes
803 AttributeModifier net/minecraft/entity/ai/attributes
804 BaseAttribute net/minecraft/entity/ai/attributes
805 BaseAttributeMap net/minecraft/entity/ai/attributes
806 ModifiableAttributeInstance net/minecraft/entity/ai/attributes
807 RangedAttribute net/minecraft/entity/ai/attributes
808 ServersideAttributeMap net/minecraft/entity/ai/attributes
809 BossStatus net/minecraft/entity/boss
810 EntityDragon net/minecraft/entity/boss
811 EntityDragonPart net/minecraft/entity/boss
824 EntityItem net/minecraft/entity/item
825 EntityItemFrame net/minecraft/entity/item
826 EntityMinecart net/minecraft/entity/item
827 EntityMinecartChest net/minecraft/entity/item
828 EntityMinecartContainer net/minecraft/entity/item
829 EntityMinecartEmpty net/minecraft/entity/item
830 EntityMinecartFurnace net/minecraft/entity/item
831 EntityMinecartHopper net/minecraft/entity/item
832 EntityMinecartTNT net/minecraft/entity/item
833 EntityPainting net/minecraft/entity/item
834 EntityTNTPrimed net/minecraft/entity/item
835 EntityXPOrb net/minecraft/entity/item
852 EntitySpider net/minecraft/entity/monster
853 EntityWitch net/minecraft/entity/monster
854 EntityZombie net/minecraft/entity/monster
855 EntityZombieGroupData net/minecraft/entity/monster
856 EntityZombieINNER1 net/minecraft/entity/monster
857 FilterIMob net/minecraft/entity/monster
858 IMob net/minecraft/entity/monster
859 ContainerSheep net/minecraft/entity/passive
862 EntityBat net/minecraft/entity/passive
863 EntityChicken net/minecraft/entity/passive
864 EntityCow net/minecraft/entity/passive
865 EntityHorse net/minecraft/entity/passive
866 EntityHorseBredSelector net/minecraft/entity/passive
867 EntityHorseGroupData net/minecraft/entity/passive
868 EntityMooshroom net/minecraft/entity/passive
869 EntityOcelot net/minecraft/entity/passive
870 EntityPig net/minecraft/entity/passive
875 EntityWaterMob net/minecraft/entity/passive
876 EntityWolf net/minecraft/entity/passive
877 IAnimals net/minecraft/entity/passive
878 CallableItemName net/minecraft/entity/player
879 EntityPlayer net/minecraft/entity/player
880 EntityPlayerMP net/minecraft/entity/player
881 EnumStatus net/minecraft/entity/player
891 EntitySnowball net/minecraft/entity/projectile
892 EntityThrowable net/minecraft/entity/projectile
893 EntityWitherSkull net/minecraft/entity/projectile
894 AnimalChest net/minecraft/inventory
895 Container net/minecraft/inventory
896 ContainerBeacon net/minecraft/inventory
897 ContainerBrewingStand net/minecraft/inventory
899 ContainerDispenser net/minecraft/inventory
900 ContainerEnchantment net/minecraft/inventory
901 ContainerFurnace net/minecraft/inventory
902 ContainerHopper net/minecraft/inventory
903 ContainerHorseInventory net/minecraft/inventory
904 ContainerHorseInventorySlotArmor net/minecraft/inventory
905 ContainerHorseInventorySlotSaddle net/minecraft/inventory
906 ContainerMerchant net/minecraft/inventory
907 ContainerPlayer net/minecraft/inventory
908 ContainerRepair net/minecraft/inventory
909 ContainerRepairINNER1 net/minecraft/inventory
910 ContainerRepairINNER2 net/minecraft/inventory
911 ContainerWorkbench net/minecraft/inventory
912 ICrafting net/minecraft/inventory
913 IInvBasic net/minecraft/inventory
914 IInventory net/minecraft/inventory
915 ISidedInventory net/minecraft/inventory
916 InventoryBasic net/minecraft/inventory
917 InventoryCraftResult net/minecraft/inventory
918 InventoryCrafting net/minecraft/inventory
919 InventoryEnderChest net/minecraft/inventory
920 InventoryLargeChest net/minecraft/inventory
921 InventoryMerchant net/minecraft/inventory
InventoryRepair net/minecraft/inventory
922 Slot net/minecraft/inventory
923 SlotArmor net/minecraft/inventory
924 SlotBeacon net/minecraft/inventory
929 SlotEnchantmentTable net/minecraft/inventory
930 SlotFurnace net/minecraft/inventory
931 SlotMerchantResult net/minecraft/inventory
932 SlotRepair BehaviorDispenseArmor net/minecraft/inventory net/minecraft/item
933 BehaviorDispenseMinecart net/minecraft/item
934 EnumAction net/minecraft/item
935 EnumArmorMaterial net/minecraft/item
936 EnumRarity net/minecraft/item
942 ItemAxe net/minecraft/item
943 ItemBed net/minecraft/item
944 ItemBlock net/minecraft/item
945 ItemBlockWithMetadata net/minecraft/item
946 ItemBoat net/minecraft/item
947 ItemBook net/minecraft/item
948 ItemBow net/minecraft/item
971 ItemHangingEntity net/minecraft/item
972 ItemHoe net/minecraft/item
973 ItemInWorldManager net/minecraft/item
974 ItemLeash net/minecraft/item
975 ItemLeaves net/minecraft/item
976 ItemLilyPad net/minecraft/item
977 ItemMap net/minecraft/item
979 ItemMinecart net/minecraft/item
980 ItemMonsterPlacer net/minecraft/item
981 ItemMultiTextureTile net/minecraft/item
982 ItemNameTag net/minecraft/item
983 ItemPickaxe net/minecraft/item
984 ItemPiston net/minecraft/item
985 ItemPotion net/minecraft/item
994 ItemSimpleFoiled net/minecraft/item
995 ItemSkull net/minecraft/item
996 ItemSlab net/minecraft/item
997 ItemSnow net/minecraft/item
998 ItemSnowball net/minecraft/item
999 ItemSoup net/minecraft/item
1000 ItemSpade net/minecraft/item
1019 RecipesWeapons net/minecraft/item/crafting
1020 ShapedRecipes net/minecraft/item/crafting
1021 ShapelessRecipes net/minecraft/item/crafting
1022 ILogAgent net/minecraft/logging
1023 LogAgent net/minecraft/logging
1024 LogAgentEmptyAnon net/minecraft/logging
1025 LogFormatter net/minecraft/logging
1026 CallableTagCompound1 net/minecraft/nbt
1027 CallableTagCompound2 net/minecraft/nbt
1028 CompressedStreamTools net/minecraft/nbt
1039 NBTTagLong net/minecraft/nbt
1040 NBTTagShort net/minecraft/nbt
1041 NBTTagString net/minecraft/nbt
1042 CallableConnectionName net/minecraft/network
1043 CallablePacketClass net/minecraft/network
1044 CallablePacketID net/minecraft/network
1045 INetworkManager net/minecraft/network
1046 MemoryConnection net/minecraft/network
1047 NetLoginHandler net/minecraft/network
1071 Packet130UpdateSign net/minecraft/network/packet
1072 Packet131MapData net/minecraft/network/packet
1073 Packet132TileEntityData net/minecraft/network/packet
1074 Packet133TileEditorOpen net/minecraft/network/packet
1075 Packet13PlayerLookMove net/minecraft/network/packet
1076 Packet14BlockDig net/minecraft/network/packet
1077 Packet15Place net/minecraft/network/packet
1086 Packet203AutoComplete net/minecraft/network/packet
1087 Packet204ClientInfo net/minecraft/network/packet
1088 Packet205ClientCommand net/minecraft/network/packet
1089 Packet206SetObjective net/minecraft/network/packet
1090 Packet207SetScore net/minecraft/network/packet
1091 Packet208SetDisplayObjective net/minecraft/network/packet
1092 Packet209SetPlayerTeam net/minecraft/network/packet
1093 Packet20NamedEntitySpawn net/minecraft/network/packet
Packet21PickupSpawn net/minecraft/network/packet
1094 Packet22Collect net/minecraft/network/packet
1095 Packet23VehicleSpawn net/minecraft/network/packet
1096 Packet24MobSpawn net/minecraft/network/packet
1101 Packet255KickDisconnect net/minecraft/network/packet
1102 Packet25EntityPainting net/minecraft/network/packet
1103 Packet26EntityExpOrb net/minecraft/network/packet
1104 Packet27PlayerInput net/minecraft/network/packet
1105 Packet28EntityVelocity net/minecraft/network/packet
1106 Packet29DestroyEntity net/minecraft/network/packet
1107 Packet2ClientProtocol net/minecraft/network/packet
1118 Packet41EntityEffect net/minecraft/network/packet
1119 Packet42RemoveEntityEffect net/minecraft/network/packet
1120 Packet43Experience net/minecraft/network/packet
1121 Packet44UpdateAttributes net/minecraft/network/packet
1122 Packet44UpdateAttributesSnapshot net/minecraft/network/packet
1123 Packet4UpdateTime net/minecraft/network/packet
1124 Packet51MapChunk net/minecraft/network/packet
1125 Packet51MapChunkData net/minecraft/network/packet
1132 Packet60Explosion net/minecraft/network/packet
1133 Packet61DoorChange net/minecraft/network/packet
1134 Packet62LevelSound net/minecraft/network/packet
1135 Packet63WorldParticles net/minecraft/network/packet
1136 Packet6SpawnPosition net/minecraft/network/packet
1137 Packet70GameEvent net/minecraft/network/packet
1138 Packet71Weather net/minecraft/network/packet
1155 PathNavigate net/minecraft/pathfinding
1156 PathPoint net/minecraft/pathfinding
1157 Potion net/minecraft/potion
1158 PotionAbsoption net/minecraft/potion
1159 PotionAttackDamage net/minecraft/potion
1160 PotionEffect net/minecraft/potion
1161 PotionHealth net/minecraft/potion
1162 PotionHealthBoost net/minecraft/potion
1163 PotionHelper net/minecraft/potion
1164 IPlayerUsage net/minecraft/profiler
1165 PlayerUsageSnooper net/minecraft/profiler
1166 PlayerUsageSnooperThread net/minecraft/profiler
1167 Profiler net/minecraft/profiler
1168 ProfilerResult net/minecraft/profiler
1169 Score net/minecraft/scoreboard
1170 ScoreComparator net/minecraft/scoreboard
1171 ScoreDummyCriteria net/minecraft/scoreboard
1172 ScoreHealthCriteria net/minecraft/scoreboard
1173 ScoreObjective net/minecraft/scoreboard
1174 ScoreObjectiveCriteria net/minecraft/scoreboard
1175 ScorePlayerTeam net/minecraft/scoreboard
1176 Scoreboard net/minecraft/scoreboard
1177 ScoreboardSaveData net/minecraft/scoreboard
1178 ServerCommandScoreboard net/minecraft/scoreboard
1179 ServerCommandTestFor net/minecraft/scoreboard
1180 ServerScoreboard net/minecraft/scoreboard
1181 Team net/minecraft/scoreboard
1182 CallableIsServerModded net/minecraft/server
1183 CallableServerMemoryStats net/minecraft/server
1184 CallableServerProfiler net/minecraft/server
1188 ThreadMinecraftServer net/minecraft/server
1189 CallableServerType net/minecraft/server/dedicated
1190 CallableType net/minecraft/server/dedicated
ConsoleLogFormatter net/minecraft/server/dedicated
ConsoleLogManager net/minecraft/server/dedicated
1191 DedicatedPlayerList net/minecraft/server/dedicated
1192 DedicatedServer net/minecraft/server/dedicated
1193 DedicatedServerCommandThread net/minecraft/server/dedicated
1194 DedicatedServerListenThread net/minecraft/server/dedicated
1195 DedicatedServerSleepThread net/minecraft/server/dedicated
1196 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
1197 IUpdatePlayerListBox net/minecraft/server/gui
1198 PlayerListBox MinecraftServerGui net/minecraft/server/gui
1199 ServerGUI MinecraftServerGuiINNER1 net/minecraft/server/gui
1200 ServerGuiCommandListener MinecraftServerGuiINNER2 net/minecraft/server/gui
1201 ServerGuiFocusAdapter MinecraftServerGuiINNER3 net/minecraft/server/gui
1202 ServerWindowAdapter PlayerListComponent net/minecraft/server/gui
1203 StatsComponent net/minecraft/server/gui
1204 StatsComponentINNER1 net/minecraft/server/gui
1205 TextAreaLogHandler net/minecraft/server/gui
1206 TextAreaLogHandlerINNER1 net/minecraft/server/gui
1207 CallableIsModded net/minecraft/server/integrated
1208 CallableType3 net/minecraft/server/integrated
1209 IntegratedPlayerList net/minecraft/server/integrated
1227 StatFileWriter net/minecraft/stats
1228 StatList net/minecraft/stats
1229 StatTypeDistance net/minecraft/stats
1230 StatTypeFloat net/minecraft/stats
1231 StatTypeSimple net/minecraft/stats
1232 StatTypeTime net/minecraft/stats
1233 StatsSyncher net/minecraft/stats
1234 ThreadStatSyncherReceive net/minecraft/stats
1235 ThreadStatSyncherSend net/minecraft/stats
1236 CallableTileEntityData net/minecraft/tileentity
1237 CallableTileEntityID net/minecraft/tileentity
1238 CallableTileEntityName net/minecraft/tileentity
1239 Hopper net/minecraft/tileentity
1240 MobSpawnerBaseLogic net/minecraft/tileentity
1241 TileEntity net/minecraft/tileentity
1242 TileEntityBeacon net/minecraft/tileentity
1243 TileEntityBrewingStand net/minecraft/tileentity
1244 TileEntityChest net/minecraft/tileentity
1245 TileEntityCommandBlock net/minecraft/tileentity
1246 TileEntityComparator net/minecraft/tileentity
1247 TileEntityDaylightDetector net/minecraft/tileentity
1248 TileEntityDispenser net/minecraft/tileentity
1249 TileEntityDropper net/minecraft/tileentity
1250 TileEntityEnchantmentTable net/minecraft/tileentity
1251 TileEntityEndPortal net/minecraft/tileentity
1252 TileEntityEnderChest net/minecraft/tileentity
1253 TileEntityFurnace net/minecraft/tileentity
1254 TileEntityHopper net/minecraft/tileentity
1255 TileEntityMobSpawner net/minecraft/tileentity
1256 TileEntityMobSpawnerSpawnData TileEntityMobSpawnerLogic net/minecraft/tileentity
1257 TileEntityNote net/minecraft/tileentity
1258 TileEntityPiston net/minecraft/tileentity
1259 TileEntityRecordPlayer net/minecraft/tileentity
1260 TileEntitySign net/minecraft/tileentity
1261 TileEntitySkull net/minecraft/tileentity
1262 WeightedRandomMinecart net/minecraft/tileentity
1263 AABBLocalPool net/minecraft/util
1264 AABBPool net/minecraft/util
1265 AxisAlignedBB net/minecraft/util
1266 ChatAllowedCharacters net/minecraft/util
1267 ChatMessageComponent net/minecraft/util
1268 ChunkCoordinates net/minecraft/util
1269 CombatEntry net/minecraft/util
1270 CombatTracker net/minecraft/util
1271 CryptManager net/minecraft/util
1272 DamageSource net/minecraft/util
1273 Direction net/minecraft/util
1275 EntityDamageSource net/minecraft/util
1276 EntityDamageSourceIndirect net/minecraft/util
1277 EnumArt net/minecraft/util
1278 EnumChatFormatting net/minecraft/util
1279 EnumFacing net/minecraft/util
1280 EnumMovingObjectType net/minecraft/util
1281 EnumOS net/minecraft/util
1282 Facing net/minecraft/util
1283 FoodStats net/minecraft/util
1284 HttpUtil net/minecraft/util
HttpUtilRunnable net/minecraft/util
IDownloadSuccess net/minecraft/util
1285 IProgressUpdate net/minecraft/util
1286 Icon net/minecraft/util
1287 IntHashMap net/minecraft/util
1288 IntHashMapEntry net/minecraft/util
1289 LongHashMap net/minecraft/util
1290 LongHashMapEntry net/minecraft/util
1291 MD5String net/minecraft/util
1292 MathHelper net/minecraft/util
1293 MessageComponentSerializer net/minecraft/util
1294 MinecraftError net/minecraft/util
1295 MouseFilter net/minecraft/util
1296 MouseHelper net/minecraft/util
1298 MovementInputFromOptions net/minecraft/util
1299 MovingObjectPosition net/minecraft/util
1300 ReportedException net/minecraft/util
1301 ResourceLocation net/minecraft/util
1302 ScreenShotHelper net/minecraft/util
1303 Session net/minecraft/util
1304 StatCollector net/minecraft/util
1305 StringTranslate net/minecraft/util
1306 StringUtils net/minecraft/util
ThreadDownloadResources net/minecraft/util
1307 Timer net/minecraft/util
1308 Tuple net/minecraft/util
1309 Util net/minecraft/util
1310 ValueObject net/minecraft/util
1311 Vec3 net/minecraft/util
1312 Vec3Pool net/minecraft/util
1313 WeightedRandom net/minecraft/util
1328 ChunkPosition net/minecraft/world
1329 ColorizerFoliage net/minecraft/world
1330 ColorizerGrass net/minecraft/world
ColorizerWater net/minecraft/world
1331 EnumGameType net/minecraft/world
1332 EnumSkyBlock net/minecraft/world
1333 Explosion net/minecraft/world
1483 ComponentScatteredFeature net/minecraft/world/gen/structure
1484 ComponentScatteredFeatureDesertPyramid net/minecraft/world/gen/structure
1485 ComponentScatteredFeatureJunglePyramid net/minecraft/world/gen/structure
1486 ComponentScatteredFeaturePieces net/minecraft/world/gen/structure
1487 ComponentScatteredFeaturePieces2 net/minecraft/world/gen/structure
1488 ComponentScatteredFeatureSwampHut net/minecraft/world/gen/structure
1489 ComponentStronghold net/minecraft/world/gen/structure
1521 MapGenNetherBridge net/minecraft/world/gen/structure
1522 MapGenStronghold net/minecraft/world/gen/structure
1523 MapGenStructure net/minecraft/world/gen/structure
1524 MapGenStructureData net/minecraft/world/gen/structure
1525 MapGenStructureIO net/minecraft/world/gen/structure
1526 MapGenVillage net/minecraft/world/gen/structure
1527 StructureBoundingBox net/minecraft/world/gen/structure
1528 StructureComponent net/minecraft/world/gen/structure
+4733 -3537
View File
File diff suppressed because it is too large. Load diff
+84 -49
View File
@@ -5,75 +5,110 @@ import java.lang.reflect.Field;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Arrays;
import joptsimple.ArgumentAcceptingOptionSpec;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import net.minecraft.client.Minecraft;
import net.minecraft.client.main.Main;
public class Start
{
public static void main(String[] args)
public static void main(String[] args) throws Exception
{
int userIndex = -1;
int passIndex = -1;
int sessIndex = -1;
int versIndex = -1;
for( int x = 0; x < args.length; x++)
{
if (args[x].equals("--username")) userIndex = x + 1;
else if (args[x].equals("--password")) passIndex = x + 1;
else if (args[x].equals("--session")) sessIndex = x + 1;
else if (args[x].equals("--version")) versIndex = x + 1;
}
if (userIndex != 0-1 && passIndex != -1 && sessIndex == -1)
{
String[] session = getSession(args[userIndex], args[passIndex]);
if (session != null)
{
args[userIndex] = session[0];
args = concat(args, new String[]{"--session", session[1]});
}
}
//Kill the password if its there so it isn't printed to the console.
if (passIndex != -1)
{
args[passIndex-1] = "no_password_for_joo";
args[passIndex] = "no_password_for_joo";
}
if (versIndex == -1)
{
args = concat(args, new String[]{ "--version", "fml_mcp" });
}
Main.main(args);
}
private static String[] getSession(String username, String password) throws UnsupportedEncodingException
{
String parameters = "http://login.minecraft.net/?user=" + URLEncoder.encode(username, "UTF-8") +
"&password=" + URLEncoder.encode(password, "UTF-8") +
"&version=" + 13;
String result = openUrl(parameters);
if (result == null)
{
System.out.println("Can't connect to minecraft.net");
return null;
}
if (!result.contains(":"))
{
System.out.println("Login Failed: " + result);
return null;
}
String[] values = result.split(":");
return new String[]{ values[2].trim(), values[3].trim() };
}
private static String openUrl(String addr)
{
try
{
Field f = Minecraft.class.getDeclaredField("field_71463_am");
Field.setAccessible(new Field[] { f }, true);
f.set(null, new File("."));
}
catch (Exception e)
{
e.printStackTrace();
return;
}
if (args.length != 2)
{
Minecraft.main(args);
}
else
{
try {
String parameters = "http://login.minecraft.net/?user=" + URLEncoder.encode(args[0], "UTF-8") +
"&password=" + URLEncoder.encode(args[1], "UTF-8") +
"&version=" + 13;
String result = openUrl(parameters);
if (result == null)
{
System.out.println("Can't connect to minecraft.net");
return;
}
if (!result.contains(":"))
{
System.out.println("Login Failed: " + result);
return;
}
//latestVersion, downloadTicket, userName, sessionId
String[] values = result.split(":");
Minecraft.main(new String[]{values[2].trim(), values[3].trim()});
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static String openUrl(String addr)
{
try {
URL url = new URL(addr);
java.io.InputStream is;
is = url.openConnection().getInputStream();
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(is));
String buf = "";
String line = null;
while((line = reader.readLine() ) != null)
while ((line = reader.readLine()) != null)
{
buf += "\n" + line;
buf += "\n" + line;
}
reader.close();
return buf;
} catch (IOException e) {
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
private static <T> T[] concat(T[] first, T[] second)
{
T[] result = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
}
+231 -91
View File
@@ -1,95 +1,51 @@
diff -r -U 3 minecraft\net\minecraft\client\Minecraft.java minecraft_patched\net\minecraft\client\Minecraft.java
--- minecraft\net\minecraft\client\Minecraft.java Sat Jan 12 02:17:55 2013
+++ minecraft_patched\net\minecraft\client\Minecraft.java Sat Jan 12 02:24:09 2013
@@ -532,9 +532,8 @@
return;
}
- while(true) {
try {
- if(this.field_71425_J) {
+ while(this.field_71425_J) {
if(this.field_71434_R && this.field_71433_S != null) {
this.func_71377_b(this.field_71433_S);
return;
@@ -552,7 +551,6 @@
this.func_71373_a(new GuiMemoryErrorScreen());
System.gc();
}
- continue;
}
} catch (MinecraftError var12) {
;
@@ -570,8 +568,6 @@
this.func_71405_e();
}
- return;
- }
}
private void func_71411_J() {
diff -r -U 3 minecraft\net\minecraft\src\CallableSuspiciousClasses.java minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java
--- minecraft\net\minecraft\src\CallableSuspiciousClasses.java Sat Jan 12 02:17:56 2013
+++ minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java Sat Jan 12 02:24:09 2013
--- minecraft\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 13:58:48 2013
+++ minecraft_patched\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 14:01:01 2013
@@ -21,9 +21,14 @@
public String func_85085_a() {
public String func_85085_a() throws SecurityException, NoSuchFieldException, IllegalAccessException, IllegalArgumentException {
StringBuilder var1 = new StringBuilder();
- Field var2 = ClassLoader.class.getDeclaredField("classes");
- var2.setAccessible(true);
+ ArrayList var3;
+ try {
Field var2 = ClassLoader.class.getDeclaredField("classes");
var2.setAccessible(true);
- ArrayList var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ ArrayList var3;
+ try {
+ Field var2 = ClassLoader.class.getDeclaredField("classes");
+ var2.setAccessible(true);
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ } catch(Exception ex) {
+ return "";
+ }
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ } catch(Exception ex) {
+ return "";
+ }
boolean var4 = true;
boolean var5 = !CrashReport.class.getCanonicalName().equals("net.minecraft.CrashReport");
HashMap var6 = new HashMap();
diff -r -U 3 minecraft\net\minecraft\src\CodecMus.java minecraft_patched\net\minecraft\src\CodecMus.java
--- minecraft\net\minecraft\src\CodecMus.java Sat Jan 12 02:17:56 2013
+++ minecraft_patched\net\minecraft\src\CodecMus.java Sat Jan 12 02:24:09 2013
@@ -1,5 +1,6 @@
package net.minecraft.src;
@@ -98,6 +103,10 @@
+import java.io.IOException;
import java.io.InputStream;
import net.minecraft.src.MusInputStream;
import paulscode.sound.codecs.CodecJOrbis;
@@ -7,6 +8,10 @@
public class CodecMus extends CodecJOrbis {
protected InputStream openInputStream() {
- return new MusInputStream(this, this.url, this.urlConnection.getInputStream());
+ try {
+ return new MusInputStream(this, this.url, this.urlConnection.getInputStream());
+ } catch (IOException e) {
+ return null;
+ }
// $FF: synthetic method
public Object call() {
+ try {
return this.func_85085_a();
+ } catch(Exception ex) {
+ return null;
+ }
}
}
diff -r -U 3 minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java
--- minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java Sat Jan 12 02:17:57 2013
+++ minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Sat Jan 12 02:24:09 2013
--- minecraft\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 13:58:48 2013
+++ minecraft_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 14:01:01 2013
@@ -11,6 +11,10 @@
public class ComponentStrongholdRightTurn extends ComponentStrongholdLeftTurn {
+ public ComponentStrongholdRightTurn(int p_i3843_1_, Random p_i3843_2_, StructureBoundingBox p_i3843_3_, int p_i3843_4_) {
+ super(p_i3843_1_, p_i3843_2_, p_i3843_3_, p_i3843_4_);
+ public ComponentStrongholdRightTurn(int p_i2074_1_, Random p_i2074_2_, StructureBoundingBox p_i2074_3_, int p_i2074_4_) {
+ super(p_i2074_1_, p_i2074_2_, p_i2074_3_, p_i2074_4_);
+ }
+
public void func_74861_a(StructureComponent p_74861_1_, List p_74861_2_, Random p_74861_3_) {
if(this.field_74885_f != 2 && this.field_74885_f != 3) {
this.func_74989_b((ComponentStrongholdStairs2)p_74861_1_, p_74861_2_, p_74861_3_, 1, 1);
diff -r -U 3 minecraft\net\minecraft\src\DedicatedServer.java minecraft_patched\net\minecraft\src\DedicatedServer.java
--- minecraft\net\minecraft\src\DedicatedServer.java Sat Jan 12 02:17:57 2013
+++ minecraft_patched\net\minecraft\src\DedicatedServer.java Sat Jan 12 02:24:09 2013
@@ -202,7 +202,7 @@
--- minecraft\net\minecraft\src\DedicatedServer.java Tue Sep 17 13:58:48 2013
+++ minecraft_patched\net\minecraft\src\DedicatedServer.java Tue Sep 17 14:01:01 2013
@@ -208,7 +208,7 @@
System.exit(0);
}
@@ -98,10 +54,56 @@ diff -r -U 3 minecraft\net\minecraft\src\DedicatedServer.java minecraft_patched\
super.func_71190_q();
this.func_71333_ah();
}
diff -r -U 3 minecraft\net\minecraft\src\EnumChatFormatting.java minecraft_patched\net\minecraft\src\EnumChatFormatting.java
--- minecraft\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 13:58:49 2013
+++ minecraft_patched\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 14:01:01 2013
@@ -38,7 +38,7 @@
private final String field_96304_B;
private EnumChatFormatting(char p_i1336_3_) {
- this(p_i1336_1_, p_i1336_2_, p_i1336_3_, false);
+ this(p_i1336_3_, false);
}
private EnumChatFormatting(char p_i1337_3_, boolean p_i1337_4_) {
diff -r -U 3 minecraft\net\minecraft\src\FileResourcePack.java minecraft_patched\net\minecraft\src\FileResourcePack.java
--- minecraft\net\minecraft\src\FileResourcePack.java Tue Sep 17 13:58:49 2013
+++ minecraft_patched\net\minecraft\src\FileResourcePack.java Tue Sep 17 14:01:01 2013
@@ -84,12 +84,18 @@
protected void finalize() {
this.close();
+ try {
super.finalize();
+ } catch(Throwable t) {
+ }
}
public void close() {
if(this.field_110600_d != null) {
+ try {
this.field_110600_d.close();
+ } catch(Exception ex) {
+ }
this.field_110600_d = null;
}
diff -r -U 3 minecraft\net\minecraft\src\FolderResourcePack.java minecraft_patched\net\minecraft\src\FolderResourcePack.java
--- minecraft\net\minecraft\src\FolderResourcePack.java Tue Sep 17 13:58:49 2013
+++ minecraft_patched\net\minecraft\src\FolderResourcePack.java Tue Sep 17 14:01:01 2013
@@ -29,7 +29,7 @@
HashSet var1 = Sets.newHashSet();
File var2 = new File(this.field_110597_b, "assets/");
if(var2.isDirectory()) {
- File[] var3 = var2.listFiles(DirectoryFileFilter.DIRECTORY);
+ File[] var3 = var2.listFiles((java.io.FileFilter)DirectoryFileFilter.DIRECTORY);
int var4 = var3.length;
for(int var5 = 0; var5 < var4; ++var5) {
diff -r -U 3 minecraft\net\minecraft\src\FontRenderer.java minecraft_patched\net\minecraft\src\FontRenderer.java
--- minecraft\net\minecraft\src\FontRenderer.java Sat Jan 12 02:17:58 2013
+++ minecraft_patched\net\minecraft\src\FontRenderer.java Sat Jan 12 02:24:09 2013
@@ -611,8 +611,6 @@
--- minecraft\net\minecraft\src\FontRenderer.java Tue Sep 17 13:58:49 2013
+++ minecraft_patched\net\minecraft\src\FontRenderer.java Tue Sep 17 14:01:01 2013
@@ -630,8 +630,6 @@
case 10:
--var5;
break;
@@ -110,19 +112,19 @@ diff -r -U 3 minecraft\net\minecraft\src\FontRenderer.java minecraft_patched\net
case 167:
if(var5 < var3 - 1) {
++var5;
@@ -626,6 +624,8 @@
@@ -645,6 +643,8 @@
}
}
break;
+ case 32:
+ var6 = var5;
+ var6 = var5;
default:
var4 += this.func_78263_a(var8);
if(var7) {
diff -r -U 3 minecraft\net\minecraft\src\IntegratedServer.java minecraft_patched\net\minecraft\src\IntegratedServer.java
--- minecraft\net\minecraft\src\IntegratedServer.java Sat Jan 12 02:17:58 2013
+++ minecraft_patched\net\minecraft\src\IntegratedServer.java Sat Jan 12 02:24:09 2013
@@ -98,7 +98,7 @@
--- minecraft\net\minecraft\src\IntegratedServer.java Tue Sep 17 13:58:50 2013
+++ minecraft_patched\net\minecraft\src\IntegratedServer.java Tue Sep 17 14:01:01 2013
@@ -103,7 +103,7 @@
return true;
}
@@ -131,10 +133,135 @@ diff -r -U 3 minecraft\net\minecraft\src\IntegratedServer.java minecraft_patched
boolean var1 = this.field_71348_o;
this.field_71348_o = this.field_71347_n.func_71752_f();
if(!var1 && this.field_71348_o) {
diff -r -U 3 minecraft\net\minecraft\src\Minecraft.java minecraft_patched\net\minecraft\src\Minecraft.java
--- minecraft\net\minecraft\src\Minecraft.java Tue Sep 17 13:58:50 2013
+++ minecraft_patched\net\minecraft\src\Minecraft.java Tue Sep 17 14:01:01 2013
@@ -604,8 +604,8 @@
return;
}
- while(true) {
- try {
+ try {
+ while(this.field_71425_J) {
if(this.field_71425_J) {
if(this.field_71434_R && this.field_71433_S != null) {
this.func_71377_b(this.field_71433_S);
@@ -626,23 +626,20 @@
}
continue;
}
- } catch (MinecraftError var12) {
- ;
- } catch (ReportedException var13) {
- this.func_71396_d(var13.func_71575_a());
- this.func_71398_f();
- var13.printStackTrace();
- this.func_71377_b(var13.func_71575_a());
- } catch (Throwable var14) {
- var2 = this.func_71396_d(new CrashReport("Unexpected error", var14));
- this.func_71398_f();
- var14.printStackTrace();
- this.func_71377_b(var2);
- } finally {
- this.func_71405_e();
}
-
- return;
+ } catch (MinecraftError var12) {
+ } catch (ReportedException var13) {
+ this.func_71396_d(var13.func_71575_a());
+ this.func_71398_f();
+ var13.printStackTrace();
+ this.func_71377_b(var13.func_71575_a());
+ } catch (Throwable var14) {
+ var2 = this.func_71396_d(new CrashReport("Unexpected error", var14));
+ this.func_71398_f();
+ var14.printStackTrace();
+ this.func_71377_b(var2);
+ } finally {
+ this.func_71405_e();
}
}
diff -r -U 3 minecraft\net\minecraft\src\RConThreadClient.java minecraft_patched\net\minecraft\src\RConThreadClient.java
--- minecraft\net\minecraft\src\RConThreadClient.java Tue Sep 17 13:58:51 2013
+++ minecraft_patched\net\minecraft\src\RConThreadClient.java Tue Sep 17 14:01:01 2013
@@ -32,8 +32,8 @@
}
public void run() {
- while(true) {
- try {
+ try {
+ while(true) {
if(!this.field_72619_a) {
break;
}
@@ -84,20 +84,14 @@
continue;
}
}
- } catch (SocketTimeoutException var17) {
- break;
- } catch (IOException var18) {
- break;
- } catch (Exception var19) {
- System.out.println(var19);
- break;
- } finally {
- this.func_72653_g();
}
-
- return;
+ } catch (SocketTimeoutException var17) {
+ } catch (IOException var18) {
+ } catch (Exception var19) {
+ System.out.println(var19);
+ } finally {
+ this.func_72653_g();
}
-
}
private void func_72654_a(int p_72654_1_, int p_72654_2_, String p_72654_3_) throws IOException {
diff -r -U 3 minecraft\net\minecraft\src\RenderBlocks.java minecraft_patched\net\minecraft\src\RenderBlocks.java
--- minecraft\net\minecraft\src\RenderBlocks.java Tue Sep 17 13:58:51 2013
+++ minecraft_patched\net\minecraft\src\RenderBlocks.java Tue Sep 17 14:01:01 2013
@@ -1960,16 +1960,16 @@
float var25 = (float)(p_78589_2_ + 1);
float var26 = (float)(p_78589_4_ + 0);
float var27 = (float)(p_78589_4_ + 1);
- boolean var28 = false;
+ int var28 = 0;
if((var20 || var21) && !var22 && !var23) {
- var28 = true;
+ var28 = 1;
}
if((var22 || var23) && !var21 && !var20) {
- var28 = true;
+ var28 = 2;
}
- if(!var28) {
+ if(var28 == 0) {
int var29 = 0;
int var30 = 0;
int var31 = 16;
@@ -2016,7 +2016,7 @@
var5.func_78374_a((double)var25, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var9.func_94214_a((double)var31), (double)var9.func_94207_b((double)var30));
var5.func_78374_a((double)var24, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var9.func_94214_a((double)var29), (double)var9.func_94207_b((double)var30));
var5.func_78374_a((double)var24, (double)p_78589_3_ + 0.015625D, (double)var27, (double)var9.func_94214_a((double)var29), (double)var9.func_94207_b((double)var32));
- } else if(var28) {
+ } else if(var28 == 1) {
var5.func_78374_a((double)var25, (double)p_78589_3_ + 0.015625D, (double)var27, (double)var8.func_94212_f(), (double)var8.func_94210_h());
var5.func_78374_a((double)var25, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var8.func_94212_f(), (double)var8.func_94206_g());
var5.func_78374_a((double)var24, (double)p_78589_3_ + 0.015625D, (double)var26, (double)var8.func_94209_e(), (double)var8.func_94206_g());
diff -r -U 3 minecraft\net\minecraft\src\RenderGlobal.java minecraft_patched\net\minecraft\src\RenderGlobal.java
--- minecraft\net\minecraft\src\RenderGlobal.java Sat Jan 12 02:17:59 2013
+++ minecraft_patched\net\minecraft\src\RenderGlobal.java Sat Jan 12 02:24:09 2013
@@ -1450,7 +1450,7 @@
--- minecraft\net\minecraft\src\RenderGlobal.java Tue Sep 17 13:58:51 2013
+++ minecraft_patched\net\minecraft\src\RenderGlobal.java Tue Sep 17 14:01:01 2013
@@ -1445,7 +1445,7 @@
double var15 = this.field_72777_q.field_71451_h.field_70165_t - p_72726_2_;
double var17 = this.field_72777_q.field_71451_h.field_70163_u - p_72726_4_;
double var19 = this.field_72777_q.field_71451_h.field_70161_v - p_72726_6_;
@@ -143,11 +270,26 @@ diff -r -U 3 minecraft\net\minecraft\src\RenderGlobal.java minecraft_patched\net
if(p_72726_1_.equals("hugeexplosion")) {
this.field_72777_q.field_71452_i.func_78873_a(var21 = new EntityHugeExplodeFX(this.field_72769_h, p_72726_2_, p_72726_4_, p_72726_6_, p_72726_8_, p_72726_10_, p_72726_12_));
} else if(p_72726_1_.equals("largeexplode")) {
diff -r -U 3 minecraft\net\minecraft\src\SoundPoolURLConnection.java minecraft_patched\net\minecraft\src\SoundPoolURLConnection.java
--- minecraft\net\minecraft\src\SoundPoolURLConnection.java Tue Sep 17 13:58:51 2013
+++ minecraft_patched\net\minecraft\src\SoundPoolURLConnection.java Tue Sep 17 14:01:01 2013
@@ -22,7 +22,11 @@
public void connect() {}
public InputStream getInputStream() {
+ try {
return SoundPool.func_110655_a(this.field_110660_a).func_110536_a(this.field_110659_b).func_110527_b();
+ } catch(Exception ex) {
+ return null;
+ }
}
// $FF: synthetic method
diff -r -U 3 minecraft\net\minecraft\src\TcpMasterThread.java minecraft_patched\net\minecraft\src\TcpMasterThread.java
--- minecraft\net\minecraft\src\TcpMasterThread.java Sat Jan 12 02:18:00 2013
+++ minecraft_patched\net\minecraft\src\TcpMasterThread.java Sat Jan 12 02:24:09 2013
--- minecraft\net\minecraft\src\TcpMasterThread.java Tue Sep 17 13:58:51 2013
+++ minecraft_patched\net\minecraft\src\TcpMasterThread.java Tue Sep 17 14:01:01 2013
@@ -11,6 +11,7 @@
this.field_74504_a = p_i3285_1_;
this.field_74504_a = p_i1395_1_;
}
+ @SuppressWarnings("deprecation")
@@ -155,15 +297,13 @@ diff -r -U 3 minecraft\net\minecraft\src\TcpMasterThread.java minecraft_patched\
try {
Thread.sleep(5000L);
diff -r -U 3 minecraft\net\minecraft\src\ThreadedFileIOBase.java minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java
--- minecraft\net\minecraft\src\ThreadedFileIOBase.java Sat Jan 12 02:18:00 2013
+++ minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java Sat Jan 12 02:24:09 2013
@@ -20,7 +20,8 @@
--- minecraft\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 13:58:52 2013
+++ minecraft_patched\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 14:01:01 2013
@@ -20,6 +20,7 @@
}
public void run() {
- this.func_75736_b();
+ while(true)
+ this.func_75736_b();
+ while(true)
this.func_75736_b();
}
private void func_75736_b() {
+114 -30
View File
@@ -1,42 +1,52 @@
diff -r -U 3 minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java
--- minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java Sat Jan 12 02:19:06 2013
+++ minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java Sat Jan 12 02:24:29 2013
--- minecraft_server\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 14:00:13 2013
+++ minecraft_server_patched\net\minecraft\src\CallableSuspiciousClasses.java Tue Sep 17 14:01:07 2013
@@ -21,9 +21,14 @@
public String func_85085_a() {
public String func_85085_a() throws SecurityException, NoSuchFieldException, IllegalAccessException, IllegalArgumentException {
StringBuilder var1 = new StringBuilder();
- Field var2 = ClassLoader.class.getDeclaredField("classes");
- var2.setAccessible(true);
+ ArrayList var3;
+ try {
Field var2 = ClassLoader.class.getDeclaredField("classes");
var2.setAccessible(true);
- ArrayList var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ ArrayList var3;
+ try {
+ Field var2 = ClassLoader.class.getDeclaredField("classes");
+ var2.setAccessible(true);
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ } catch(Exception ex) {
+ return "";
+ }
+ var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader()));
+ } catch(Exception ex) {
+ return "";
+ }
boolean var4 = true;
boolean var5 = !CrashReport.class.getCanonicalName().equals("net.minecraft.CrashReport");
HashMap var6 = new HashMap();
@@ -98,6 +103,10 @@
// $FF: synthetic method
public Object call() {
- return this.func_85085_a();
+ try {
+ return this.func_85085_a();
+ } catch(Exception ex) {
+ return null;
+ }
}
}
diff -r -U 3 minecraft_server\net\minecraft\src\ComponentStrongholdRightTurn.java minecraft_server_patched\net\minecraft\src\ComponentStrongholdRightTurn.java
--- minecraft_server\net\minecraft\src\ComponentStrongholdRightTurn.java Sat Jan 12 02:19:06 2013
+++ minecraft_server_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Sat Jan 12 02:24:29 2013
--- minecraft_server\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 14:00:14 2013
+++ minecraft_server_patched\net\minecraft\src\ComponentStrongholdRightTurn.java Tue Sep 17 14:01:07 2013
@@ -11,6 +11,10 @@
public class ComponentStrongholdRightTurn extends ComponentStrongholdLeftTurn {
+ public ComponentStrongholdRightTurn(int p_i3843_1_, Random p_i3843_2_, StructureBoundingBox p_i3843_3_, int p_i3843_4_) {
+ super(p_i3843_1_, p_i3843_2_, p_i3843_3_, p_i3843_4_);
+ public ComponentStrongholdRightTurn(int p_i2074_1_, Random p_i2074_2_, StructureBoundingBox p_i2074_3_, int p_i2074_4_) {
+ super(p_i2074_1_, p_i2074_2_, p_i2074_3_, p_i2074_4_);
+ }
+
public void func_74861_a(StructureComponent p_74861_1_, List p_74861_2_, Random p_74861_3_) {
if(this.field_74885_f != 2 && this.field_74885_f != 3) {
this.func_74989_b((ComponentStrongholdStairs2)p_74861_1_, p_74861_2_, p_74861_3_, 1, 1);
diff -r -U 3 minecraft_server\net\minecraft\src\DedicatedServer.java minecraft_server_patched\net\minecraft\src\DedicatedServer.java
--- minecraft_server\net\minecraft\src\DedicatedServer.java Sat Jan 12 02:19:06 2013
+++ minecraft_server_patched\net\minecraft\src\DedicatedServer.java Sat Jan 12 02:24:29 2013
@@ -203,7 +203,7 @@
--- minecraft_server\net\minecraft\src\DedicatedServer.java Tue Sep 17 14:00:14 2013
+++ minecraft_server_patched\net\minecraft\src\DedicatedServer.java Tue Sep 17 14:01:07 2013
@@ -209,7 +209,7 @@
System.exit(0);
}
@@ -45,11 +55,87 @@ diff -r -U 3 minecraft_server\net\minecraft\src\DedicatedServer.java minecraft_s
super.func_71190_q();
this.func_71333_ah();
}
diff -r -U 3 minecraft_server\net\minecraft\src\EnumChatFormatting.java minecraft_server_patched\net\minecraft\src\EnumChatFormatting.java
--- minecraft_server\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 14:00:14 2013
+++ minecraft_server_patched\net\minecraft\src\EnumChatFormatting.java Tue Sep 17 14:01:07 2013
@@ -38,7 +38,7 @@
private final String field_96304_B;
private EnumChatFormatting(char p_i1336_3_) {
- this(p_i1336_1_, p_i1336_2_, p_i1336_3_, false);
+ this(p_i1336_3_, false);
}
private EnumChatFormatting(char p_i1337_3_, boolean p_i1337_4_) {
diff -r -U 3 minecraft_server\net\minecraft\src\MemoryConnection.java minecraft_server_patched\net\minecraft\src\MemoryConnection.java
--- minecraft_server\net\minecraft\src\MemoryConnection.java Tue Sep 17 14:00:15 2013
+++ minecraft_server_patched\net\minecraft\src\MemoryConnection.java Tue Sep 17 14:01:07 2013
@@ -11,13 +11,18 @@
public class MemoryConnection implements INetworkManager {
private static final SocketAddress field_74444_a = new InetSocketAddress("127.0.0.1", 0);
- private final List field_74442_b;
+ private final List field_74442_b = java.util.Collections.synchronizedList(new java.util.ArrayList());
private final ILogAgent field_98214_c;
private MemoryConnection field_74443_c;
private NetHandler field_74440_d;
private boolean field_74441_e;
private String field_74438_f;
private Object[] field_74439_g;
+
+ public MemoryConnection(ILogAgent p_i1392_1_, NetHandler p_i1392_2_) {
+ this.field_74440_d = p_i1392_2_;
+ this.field_98214_c = p_i1392_1_;
+ }
public void func_74425_a(NetHandler p_74425_1_) {
this.field_74440_d = p_74425_1_;
diff -r -U 3 minecraft_server\net\minecraft\src\RConThreadClient.java minecraft_server_patched\net\minecraft\src\RConThreadClient.java
--- minecraft_server\net\minecraft\src\RConThreadClient.java Tue Sep 17 14:00:15 2013
+++ minecraft_server_patched\net\minecraft\src\RConThreadClient.java Tue Sep 17 14:01:07 2013
@@ -32,8 +32,8 @@
}
public void run() {
- while(true) {
- try {
+ try {
+ while(true) {
if(!this.field_72619_a) {
break;
}
@@ -84,20 +84,14 @@
continue;
}
}
- } catch (SocketTimeoutException var17) {
- break;
- } catch (IOException var18) {
- break;
- } catch (Exception var19) {
- System.out.println(var19);
- break;
- } finally {
- this.func_72653_g();
}
-
- return;
+ } catch (SocketTimeoutException var17) {
+ } catch (IOException var18) {
+ } catch (Exception var19) {
+ System.out.println(var19);
+ } finally {
+ this.func_72653_g();
}
-
}
private void func_72654_a(int p_72654_1_, int p_72654_2_, String p_72654_3_) throws IOException {
diff -r -U 3 minecraft_server\net\minecraft\src\TcpMasterThread.java minecraft_server_patched\net\minecraft\src\TcpMasterThread.java
--- minecraft_server\net\minecraft\src\TcpMasterThread.java Sat Jan 12 02:19:08 2013
+++ minecraft_server_patched\net\minecraft\src\TcpMasterThread.java Sat Jan 12 02:24:29 2013
--- minecraft_server\net\minecraft\src\TcpMasterThread.java Tue Sep 17 14:00:16 2013
+++ minecraft_server_patched\net\minecraft\src\TcpMasterThread.java Tue Sep 17 14:01:07 2013
@@ -11,6 +11,7 @@
this.field_74504_a = p_i3285_1_;
this.field_74504_a = p_i1395_1_;
}
+ @SuppressWarnings("deprecation")
@@ -57,15 +143,13 @@ diff -r -U 3 minecraft_server\net\minecraft\src\TcpMasterThread.java minecraft_s
try {
Thread.sleep(5000L);
diff -r -U 3 minecraft_server\net\minecraft\src\ThreadedFileIOBase.java minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java
--- minecraft_server\net\minecraft\src\ThreadedFileIOBase.java Sat Jan 12 02:19:08 2013
+++ minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java Sat Jan 12 02:24:29 2013
@@ -20,7 +20,8 @@
--- minecraft_server\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 14:00:16 2013
+++ minecraft_server_patched\net\minecraft\src\ThreadedFileIOBase.java Tue Sep 17 14:01:07 2013
@@ -20,6 +20,7 @@
}
public void run() {
- this.func_75736_b();
+ while(true)
+ this.func_75736_b();
+ while(true)
this.func_75736_b();
}
private void func_75736_b() {
+3 -3
View File
@@ -1,4 +1,4 @@
[VERSION]
MCPVersion = 7.30
ClientVersion = 13w02b
ServerVersion = 13w02b
MCPVersion = 8.11
ClientVersion = 1.6.4
ServerVersion = 1.6.4
-20
View File
@@ -1,20 +0,0 @@
import urllib
import zipfile
import sys
import os
if __name__ == '__main__':
if not len(sys.argv) >= 3:
print 'Invalid arguments, must supply mcp folder and fml folder: decompile.py <MCPFolder> <FMLFolder>'
else:
mcp_dir = os.path.abspath(sys.argv[1])
fml_dir = os.path.abspath(sys.argv[2])
dont_gen_conf = '-no_gen_conf' in sys.argv
sys.path.append(os.path.join(fml_dir, 'install'))
from fml import setup_fml, setup_mcp
setup_mcp(fml_dir, mcp_dir, dont_gen_conf)
setup_fml(fml_dir, mcp_dir)
Binary file not shown.
-2
View File
@@ -1,2 +0,0 @@
default.dev.home=/home/cpw/projects/mcworkspace
default.mcp.home=${default.dev.home}/vanillamcp
-43
View File
@@ -1,43 +0,0 @@
import sys
import os
import subprocess, shlex
mcp_root = os.path.abspath(sys.argv[1])
sys.path.append(os.path.join(mcp_root,"runtime"))
from filehandling.srgshandler import parse_srg
def cmdsplit(args):
if os.sep == '\\':
args = args.replace('\\', '\\\\')
return shlex.split(args)
def main():
list_file = os.path.abspath(sys.argv[2])
with open(list_file, 'w') as fh:
write_changed(fh, os.path.join(mcp_root,"temp","client.md5"), os.path.join(mcp_root,"temp","client_reobf.md5"), 'minecraft')
write_changed(fh, os.path.join(mcp_root,"temp","server.md5"), os.path.join(mcp_root,"temp","server_reobf.md5"), 'minecraft_server')
def write_changed(fh, pre, post, name):
if not os.path.isfile(pre) or not os.path.isfile(post):
print 'MD5s Missing! Can not extract %s changed files' % name
return
cmd = 'diff --unchanged-group-format='' --old-group-format='' --new-group-format=\'%%>\' --changed-group-format=\'%%>\' %s %s' % (pre, post)
process = subprocess.Popen(cmdsplit(cmd), stdout=subprocess.PIPE, bufsize=-1)
difflist,_= process.communicate()
srg_data = parse_srg(os.path.join(mcp_root,"temp","client_rg.srg"))
classes = {}
for row in srg_data['CL']:
classes[row['deobf_name']] = row['obf_name']
for diff in difflist.splitlines():
diffrow=diff.strip().split()
clazz=diffrow[0]
if clazz in classes:
clazz=classes[clazz]
if clazz.startswith("net/minecraft/src/"):
clazz=clazz[len("net/minecraft/src/"):]
fh.write("%s/%s.class\n" %(name,clazz))
if __name__ == '__main__':
main()
-76
View File
@@ -1,76 +0,0 @@
import sys
import os
import commands
import fnmatch
import re
import subprocess, shlex
mcp_home = sys.argv[1]
mcp_dir = os.path.abspath(mcp_home)
print(mcp_dir)
sys.path.append(mcp_dir)
from runtime.commands import Commands
Commands._version_config = os.path.join(mcp_dir,Commands._version_config)
def cmdsplit(args):
if os.sep == '\\':
args = args.replace('\\', '\\\\')
return shlex.split(args)
def cleanDirs(path):
if not os.path.isdir(path):
return
files = os.listdir(path)
if len(files):
for f in files:
fullpath = os.path.join(path, f)
if os.path.isdir(fullpath):
cleanDirs(fullpath)
files = os.listdir(path)
if len(files) == 0:
os.rmdir(path)
def main():
print("Obtaining version information from git")
cmd = "git describe --long --match='[^(jenkins)]*'"
try:
process = subprocess.Popen(cmdsplit(cmd), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=-1)
vers, _ = process.communicate()
except OSError:
print("Git not found")
vers="v1.0-0-deadbeef"
(major,minor,rev,githash)=re.match("v(\d+).(\d+)-(\d+)-(.*)",vers).groups()
(mcpversion,mcclientversion,mcserverversion) = re.match("[.\w]+ \(data: ([.\w]+), client: ([.\w.]+), server: ([.\w.]+)\)",Commands.fullversion()).groups()
if os.getenv("GIT_BRANCH") is None:
cmd = "git rev-parse --abbrev-ref HEAD"
try:
process = subprocess.Popen(cmdsplit(cmd), stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=-1)
branch, _ = process.communicate()
branch = branch.strip()
except OSError:
print("Git not found")
branch="master"
else:
branch=os.getenv("GIT_BRANCH").rpartition('/')[2]
if branch == 'HEAD':
branch = "master"
with open("fmlversion.properties","w") as f:
f.write("%s=%s\n" %("fmlbuild.major.number",major))
f.write("%s=%s\n" %("fmlbuild.minor.number",minor))
f.write("%s=%s\n" %("fmlbuild.revision.number",rev))
f.write("%s=%s\n" %("fmlbuild.githash",githash))
f.write("%s=%s\n" %("fmlbuild.mcpversion",mcpversion))
f.write("%s=%s\n" %("fmlbuild.mcversion",mcclientversion))
f.write("%s=%s\n" %("fmlbuild.branch",branch))
print("Version information: FML %s.%s.%s (%s) using MCP %s for minecraft %s" % (major, minor, rev, branch, mcpversion, mcclientversion))
if __name__ == '__main__':
main()
Binary file not shown.
Loaded 100 of 434 files, more files were not shown because too many files have changed in this diff. Show more